Просмотр полной версии : странности с 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();
Как сделать так, чтобы фокус убирался при щелчке вне поля?
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 проблему изначальную решил?
Все работает. Выберите что-нибудь другое вместо onMouseDown, например кнопку на всю сцену положите (под поле) и onRollOver. Или проверяйте хиттестом, находится ли курсор над полем.
zurmansor
13.08.2007, 12:39
например кнопку на всю сцену положите (под поле) и onRollOver
это идея...
пост №8 проблему изначальную решил?
Нет :(. всё попрежнему.
Пожалуйста - все работает.
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
Млин. А ларчик просто открывался. Спасибо.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.