PDA

Просмотр полной версии : странности с TextInput


zurmansor
13.08.2007, 11:52
У меня есть клип и в нём TextInput. так вот свойства TextInput не определены почему-то.

class panel extends MovieClip
{
public var input_ti:mx.controls.TextInput;
public function panel(){
input_ti.editable=true;
input_ti.text="hello";
trace(input_ti.text);//undefined
trace(input_ti);//_level0.instance1.input_ti
}
}

Что не так?

CrazyFlasher
13.08.2007, 11:57
замените mx.controls.TextInput на TextField.

zurmansor
13.08.2007, 12:02
нет. к сожалению нужен именно TextInput. TextField не покатит. Кагда использую TextFild с возможностью редактирования, то когда в него ставиш фокус - он больше не убирается. Для того, чтобы убрать фокус только нужно переходить в другой TextField.

zurmansor
13.08.2007, 12:08
class panel extends MovieClip
{
public var input_tf:TextField;
public function panel(){
input_tf.text="hello";
}
}

теперь когда поставил курсор в это поле и отредактировал его, то не могу убрать из него фокус. Как сделать так, чтобы фокус убирался при щелчке вне поля?

CrazyFlasher
13.08.2007, 12:08
у вас не был создан объект класса.

import mx.controls.TextInput;

class panel extends MovieClip
{
public var input_ti:TextInput = new TextInput();

...........

zurmansor
13.08.2007, 12:13
Как это не был , когда trace(input_ti); выдаёт "_level0.instance1.input_ti" ?
Тем более, что когда сделал так как вы советовали - вот что он мне выдал:
**Error** C:\Documents and Settings\User\Рабочий стол\panel.as: Line 4: A class's instance variables may only be initialized to compile-time constant expressions.
public var input_ti:TextInput=new TextInput();

Kikasso
13.08.2007, 12:14
Как сделать так, чтобы фокус убирался при щелчке вне поля?
Selection.setFocus(null);

CrazyFlasher
13.08.2007, 12:19
ну да...я опечатался

import mx.controls.TextInput;

class panel extends MovieClip{
public var input_ti:TextInput

public function panel(){
input_ti = new TextInput();
input_tf.text="hello";

...........

zurmansor
13.08.2007, 12:20
Selection.setFocus(null);

сделал так как вы советовали:

_root.onMouseDown=function(){
Selection.setFocus(null);
}

не помогло :(. Фокус и ныне там.

zurmansor
13.08.2007, 12:23
Просто мне при событии потери фокуса нужно отправлять на сервер xml с изменившимся текстом. А когда курсор всё время мигает в текстовом поле - некрасиво. да и вешать функцию на _root.onMouseDown тоже не то. Мне он нужен для других целей. Её лучше повесить на onKillFocus.

zurmansor
13.08.2007, 12:28
а если сделать вот так -

input_tf.onKillFocus=function (newFocus){
Selection.setFocus(null);
}
То зацикливается клип.

CrazyFlasher
13.08.2007, 12:30
пост №8 проблему изначальную решил?

Kikasso
13.08.2007, 12:33
Все работает. Выберите что-нибудь другое вместо onMouseDown, например кнопку на всю сцену положите (под поле) и onRollOver. Или проверяйте хиттестом, находится ли курсор над полем.

zurmansor
13.08.2007, 12:39
например кнопку на всю сцену положите (под поле) и onRollOver
это идея...
пост №8 проблему изначальную решил?
Нет :(. всё попрежнему.

Kikasso
13.08.2007, 12:42
Пожалуйста - все работает.

var mc:MovieClip = createEmptyMovieClip('mc',1);
var tf: TextField = mc.createTextField( 'tf', 1, 50, 50, 200, 20 );
tf.border = true;
tf.type = 'input';
onMouseMove = function(){
if(!mc.hitTest(_xmouse, _ymouse, false))Selection.setFocus(null);
else Selection.setFocus(tf);
}

CrazyFlasher
13.08.2007, 12:44
Нет . всё попрежнему.


Как нет? При трейсе выдаёт всё ок и никаких undefined

zurmansor
13.08.2007, 12:49
Как нет? При трейсе выдаёт всё ок и никаких undefined
Трейс, то мы обманули, а вот в клипе текста "hello" нет. Он по прежнему пустой.

CrazyFlasher
13.08.2007, 12:56
import mx.controls.TextInput;
class panel extends MovieClip
{
private var target:MovieClip;
public var input_ti:TextInput;
public function panel(){
input_ti = new TextInput();
target = _root;
target.input_ti.editable=true;
target.input_ti.text="hello";
}
}


он просто не видел ;-)

zurmansor
13.08.2007, 13:06
...
target = _root;
target.input_ti.editable=true;
target.input_ti.text="hello";
}
}


он просто не видел ;-)
Стоп! При чём сдесь _root? TextInput в клипе находится(this), а не в _root.
Вообщем я вкладываю тестовый проэкт. Вот как в нём выводить hello в TextInput? Причём TextInput должен быть в классе panel.

CrazyFlasher
13.08.2007, 13:16
import mx.controls.TextInput;
import mx.utils.Delegate;

class panel extends MovieClip {
private var input_ti:TextInput;
public function panel() {
this.onLoad = Delegate.create(this, setText);
}
private function setText(){
this.input_ti.text = "hello";
trace(this.input_ti.text);
}
}

zurmansor
13.08.2007, 13:23
Млин. А ларчик просто открывался. Спасибо.