Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Error #1009: Не удается вызвать свойство... (http://www.flasher.ru/forum/showthread.php?t=172039)

CarnoPhage 30.11.2011 14:53

Error #1009: Не удается вызвать свойство...
 
Здравствуйте. Создал кнопку, внутри которой есть текстовое поле. К этой кнопке, я привязал класс.



Код AS3:

package 
{
        import flash.display.*;
        import flash.text.TextField;
        import flash.events.*;
 
        public class MyButton extends SimpleButton
        {
                public function MyButton()
                {
                        addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
                }
 
 
                function fl_MouseClickHandler(event:MouseEvent):void
                {
                        MyTextField.text = "Hello World!"; // Ошибка #1009
                }
        }
}

Поместил ее на главный фрейм. И при клике на кнопку, текстовому полю MyTextField должен присваивается новый текст, но в момент присваивания, вылезает ошибка TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". Почему объекта как будто нет?

cleptoman 30.11.2011 15:07

если MyTextField это имя тексфилда, то делается все по другому..
свойства такого в классе у вас нет...

Код AS3:

(this.getChildByName("MyTextField") as TextField).text = "Hello World!";

Добавлено через 1 минуту
а, пардон..у вас екстенд от симплбаттона..тогда все еще замороченней ) нужно сначала получить ссылку на текущий стейт, в нем получить ссылку на текстфилд..
наследуйтесь лучше от спрайта.

CarnoPhage 30.11.2011 15:15

Что то я не могу понять, как перенаследовать мою кнопку от спрайта...

Понял, сделал как сказали, стало норм. Спасиба)


Кому интересно

Код AS3:

(Sprite(this.upState).getChildAt(2) as TextField).text="Новый текст"; 
(Sprite(this.downState).getChildAt(2) as TextField).text="Новый текст";
(Sprite(this.overState).getChildAt(2) as TextField).text="Новый текст";

главное найти номер объекта для getChildAt, можно все перебрать

Код AS3:

var butState:Sprite = Sprite(this.upState);
for (var i:int = 0; i < butState.numChildren; i++)
{
  var child:DisplayObject = butState.getChildAt(i);
  if (child is TextField)
  {               
    var tf:TextField = TextField(child);
    tf.text=name;
    break;
  }
}



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

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