PDA

Просмотр полной версии : Изменить имя TextField программно


AlexTrin
27.05.2013, 14:38
Народ, есть код:
analogTXT.text = analogTXT.text.substr(0, analogTXT.text.length - 1);

как можно программно изменить имя текстфилда analogTXT?

пробовал так:
var nTXT:String = "NewTXT";

(nTXT).text = (nTXT).text.substr(0, (nTXT).text.length - 1);

Что то не выходит.
Возможно ли это и как?

ProcXel.A
27.05.2013, 14:44
Непонятно, зачем тебе это.)))) Но это можно сделать так:
var new_name:TextField = analogTXT;
new_name.text = new_name.text.substr(0, new_name.text.length - 1);
"analogTXT" - это имя ссылки. Соответственно, можно поменять ссылку текстового поля на любую другую.

AlexTrin
27.05.2013, 15:05
Огромное спасибо, то что нужно.

Добавлено через 24 минуты
а как поменять имя вызываемой функции checkA:
button.addEventListener(MouseEvent.CLICK, checkA);

Добавлено через 29 минут
Если делаю так:
var checkA:Function = NewFunc;

button.addEventListener(MouseEvent.CLICK, checkA);

Пишет ошибку, хотя функция NewFunc существует:
TypeError: Error #2007: Параметр listener не должен быть равен нулю.
at flash.events::EventDispatcher/addEventListener()

ProcXel.A
27.05.2013, 15:43
Что ты там делаешь вообще?))))) Функцию можно просто переименовать и всё.) Зачем тебе новые имена всего подряд? Может, есть более разумное решение. Расскажи, чего ты пытаешься добиться?

AlexTrin
27.05.2013, 15:52
Есть две функции и много слушателей которые при IF должны ссылаться либо на 1 функцию либо на 2.
Вот поэтому и надо изменить разом у всех слушателей имя функции при IF

ProcXel.A
27.05.2013, 15:59
Намного проще сделать что-нибудь типа такого:
button1.addEventListener(MouseEvent.CLICK, Click);
button2.addEventListener(MouseEvent.CLICK, Click);
button3.addEventListener(MouseEvent.CLICK, Click);
button4.addEventListener(MouseEvent.CLICK, Click);
//Много слушателей...
function Click( e:MouseEvent ):void {
if ( /*Условие.*/ ) {
Func1();
}
else {
Func2();
}
}
function Func1():void {};
function Func2():void {};
То есть. В той функции, которая висит на слушателе, проверяешь условие и выполняешь нужную тебе функцию.

AlexTrin
27.05.2013, 16:06
да, этот метод проще, но он не подходит.
Возможно ли как-нибудь изменить имя по-другому?

ProcXel.A
27.05.2013, 16:16
Немного теории.
Когда назначается слушатель методом addEventListener( MouseEvent.CLICK, Func ); То в слушатель передается не имя функции, а объект функции. Поэтому переназначить функцию слушателя вот так var Func:Function = NewFunc; нельзя. В слушатель не добавится новая функция таким образом.

Если тебе нужно изменить функцию слушателя, то тебе нужно удалить старый слушатель и повесить новый.
var action:Boolean = true;
btn.addEventListener( MouseEvent.CLICK, Click1 );
btn2.addEventListener( MouseEvent.CLICK, Change );
function Click1( e:MouseEvent ):void {
trace( 1 );
}
function Click2( e:MouseEvent ):void {
trace( 2 );
}
function Change( e:Event ) {
if ( action == true ) {
btn.removeEventListener( MouseEvent.CLICK, Click1 );
btn.addEventListener( MouseEvent.CLICK, Click2 );
}
else {
btn.removeEventListener( MouseEvent.CLICK, Click2 );
btn.addEventListener( MouseEvent.CLICK, Click1 );
}
action = !action;
}

AlexTrin
27.05.2013, 16:58
а как удалить сразу всех нужных слушателей, чтобы не перечислять их по порядку?

ProcXel.A
27.05.2013, 17:05
var objects:Array = [button1, button2, button3, button4, button5, button6];
for ( var i:int = 0; i < objects.length; ++i ) {
objects[i].removeEventListener( MouseEvent.CLICK, Click1 );
}

AlexTrin
27.05.2013, 17:55
ProcXel.A, огромное спасибо, прямо в точку.

Wolsh
27.05.2013, 19:38
А мне по-прежнему хочется наругать за имена методов с заглавной и за "++i".
И за вычисление длины массива в каждой итерации.

ProcXel.A
27.05.2013, 20:07
А мне по-прежнему хочется наругать за имена методов с заглавной и за "++i".Создай тему в разделе флейм и ругай, сколько хочешь (http://www.flasher.ru/forum/showthread.php?t=199950).))