Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обращение к текстовому полю внутри Button загруженной из библиотеки (http://www.flasher.ru/forum/showthread.php?t=155251)

micoloss 30.04.2011 17:23

Обращение к текстовому полю внутри Button загруженной из библиотеки
 
Доброго времени суток!

Недавно начал юзать AS 3. Вопрос в следующем:
В библиотеки лежит Button с полем Dynamic Text внутри. Имя у этого поля t1.

Подгружаю эту кнопку динамически и хочу менять текст внутри кнопки.

Код AS3:

 
for (var i:int = 0; i < 9; i++) {
 
                var imageHolder:MovieClip = new MovieClip();
                var but:Button_01 = new Button_01();
                but.name = 'b' + i;
                Button_01(this.getChildByName('b' + i)).t1.text = "1";
                ...
 
}

Вообщем побывал разные способы изменения текста - пока не могу найти нужный. На все варианты с getChildByName даёт ошибку:

Код AS3:

TypeError: Error #1006: getChildByName не является функцией.

Как правильно обратится к текстовому полю?
Спасибо!

DZHETIGAPA 30.04.2011 17:44

у button есть свойство label. Обращайся к нему.

micoloss 30.04.2011 17:51

так у меня же не компонент Button a Button который типа MovieClip или Graphic (не знаю как он правильно называется). Там я вручную создал динамическое текстовое поле - как label связан с моим полем?

DZHETIGAPA 30.04.2011 17:53

Так в чем тогда сложность? Как я понимаю текст внутри кнопки это TextField. Меняй просто свойство text текстового поляи все.

micoloss 30.04.2011 17:58

не получается поменять ))
делаю так
Код AS3:

but.t1.text = "1";

говорит как будто его нет:
Код AS3:

Не удается вызвать свойство или метод со ссылкой на объект "null".

хотя в самой кнопки есть такое поле с инстансом t1. Или кроме инстанса еще нужно где ните это поле обозвать?

DZHETIGAPA 30.04.2011 18:07

ты бы лучше объяснил, что у тебя кнопка представляет, Как я понял, ты пишешь в кадрах...

Код AS3:

var but:Button_01 = new Button_01();

А ты хоть класс такой создал? Объекта как бы не существует. Потрейси but и t1 и глянь на результаты.

micoloss 30.04.2011 18:21

Вложений: 1
пример во вложении
если закомментить

Код AS3:

but.t1.text = "1";

то все будет работать

goodguy 30.04.2011 19:55

То, что там создано - это не MovieClip, а SimpleButton. Она не является потомком DisplayObjectContainer'а
соответственно и к тому, что у нее внутри, доступа нет

КорДум 30.04.2011 19:58

Ну и дополню ответом на следующий возможный вопрос: пишите свою кнопку или используйте готовые библиотеки компонентов.

micoloss 30.04.2011 20:26

Спасибо за ответы, но всё равно не понятно почему разработчики не продумали такой удобный функционал!

expl 30.04.2011 23:02

Вложений: 1
Всё как раз продумано, у кнопки есть доступ к дисплей-объектам, реализующим каждое состояние, например
Код AS3:

button.overState// тип DisplayObject

По-идее, если вы туда текст влепили можно скастовать к Sprite, найти там текст-филд и поменять текст
Не уверен, правда, что при переходе между состояниями текст сохранится. Если программно эти состояния назначаешь - всё нормально.
Код AS3:

(button.upState as Sprite).getChildByName("tf").text = "Button";
(button.overState as Sprite).getChildByName("tf").text = "Button";
(button.downState as Sprite).getChildByName("tf").text = "Button";

Update

На самом деле все несколько по-другому:
Код AS3:

button.addEventListener(MouseEvent.CLICK, onButtonClick);
var numClicks:int = 0;
function onButtonClick(event:MouseEvent):void
{
        numClicks++;
        var newText:String = "Clicks:" + numClicks;
        ((button.upState as Sprite).getChildAt(1) as TextField).text = newText;
        ((button.overState as Sprite).getChildAt(1) as TextField).text = newText;
        ((button.downState as Sprite).getChildAt(1) as TextField).text = newText;
}

Пример (как обратиться к текст-филду по имени, а не по индексу - так и не понял):
Вложение 26503


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

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