Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Изменить имя TextField программно (http://www.flasher.ru/forum/showthread.php?t=199933)

AlexTrin 27.05.2013 14:38

Изменить имя TextField программно
 
Народ, есть код:
Код AS3:

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

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

пробовал так:
Код AS3:

var nTXT:String = "NewTXT";
 
(nTXT).text = (nTXT).text.substr(0, (nTXT).text.length - 1);

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

ProcXel.A 27.05.2013 14:44

Непонятно, зачем тебе это.)))) Но это можно сделать так:
Код AS3:

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:
Код AS3:

button.addEventListener(MouseEvent.CLICK, checkA);

Добавлено через 29 минут
Если делаю так:
Код AS3:

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

Намного проще сделать что-нибудь типа такого:
Код AS3:

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

Немного теории.
Когда назначается слушатель методом
Код AS3:

addEventListener( MouseEvent.CLICK, Func );

То в слушатель передается не имя функции, а объект функции. Поэтому переназначить функцию слушателя вот так
Код AS3:

var Func:Function = NewFunc;

нельзя. В слушатель не добавится новая функция таким образом.

Если тебе нужно изменить функцию слушателя, то тебе нужно удалить старый слушатель и повесить новый.
Код AS3:

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

Код AS3:

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".
Создай тему в разделе флейм и ругай, сколько хочешь.))


Часовой пояс GMT +4, время: 14:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.