Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как создать ComboBox программно (FlashDevelop) (http://www.flasher.ru/forum/showthread.php?t=197592)

AzagThoth 09.04.2013 22:51

Как создать ComboBox программно (FlashDevelop)
 
Здравствуйте. Хочу переписать своё приложение с AS2 на AS3. Но вот решил сделать это полностью во FlashDevelop. Всё вроде получается. Но столкнулся с трудностью. Каким образом можно программно создавать компонент ComboBox? Обыкновенное создание кодом к сожалению не работает.

Код AS3:

package net.azag.as3
{
        import fl.controls.ComboBox;
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
        /**
        * ...
        * @author Azag-Thoth
        */

        public class Main extends MovieClip
        {
                public var playlist_cb : ComboBox;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        playlist_cb = new ComboBox();
                        playlist_cb.addItem({label:"Item 1"});
                        playlist_cb.addItem({label:"Item 2"});
                        playlist_cb.addItem({label:"Item 3"});
                        addChild(playlist_cb);
 
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                }
 
        }
 
}

После компиляции такая ошибка:
Код:

TypeError: Error #2007: Параметр child не должен быть равен нулю.
        at flash.display::DisplayObjectContainer/addChildAt()
        at fl.controls::BaseButton/drawBackground()
        at fl.controls::BaseButton/draw()
        at fl.core::UIComponent/drawNow()
        at fl.controls::ComboBox/drawLayout()
        at fl.controls::ComboBox/draw()
        at fl.core::UIComponent/callLaterDispatcher()

Я думаю что дело в том, что если бы я делал это во Flash IDE то там, на рабочий стол перетягиваем компонент, а затем с него удаляем и так после фиксации компонента в библиотеки символов можно с ним работать. Здесь же библиотеки символов как бы и нету вовсе. Подозреваю что это достаточно фундаментальный вопрос который имеет отношение к использованию не только ComboBox, но и любых других компонентов. Пожалуйста, подскажите как сделать или где почитать об этом.

Добавлено через 46 минут
Вероятно поторопился с созданием темы. Уже нагуглил.
Тут:
http://www.flasher.ru/forum/showthread.php?t=137673
http://www.murmadillo.tut.su/html/slider.html
http://flashgamedev.ru/viewtopic.php?f=6&t=1019
http://stackoverflow.com/questions/5...tionscript-3-0
http://flashgamedev.ru/viewtopic.php?f=6&t=1019
http://as3coder.blogspot.ru/2009/12/...shdevelop.html
http://www.flashdevelop.org/communit...hp?f=13&t=4344

Добавлено через 2 часа 33 минуты
Тем не менее пока ничего не выходит. Если у кого-то есть пример как такое сделать, покажите пожалуйста.

Добавлено через 3 часа 14 минут
Расскажу поподробнее как я делаю сейчас.
Во Flash IDE создаю новый .fla (тип AS3)
После этого перетаскиваю в библиотеку компонент.
В параметрах публикации выставляю галочку на swc. Публикую.
После этого во FlashDevelop нажимаю на появившемся .swc файлике второй кнопкой мыши и нажимаю "Add To Library".

Теперь код:
Код AS3:

package net.azag.as3
{
        import fl.controls.ComboBox;
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
        /**
        * ...
        * @author Azag-Thoth
        */

        public class Main extends MovieClip
        {
                public var playlist_cb : ComboBox;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        playlist_cb = new ComboBox();
                        playlist_cb.addItem({label:"Item 1"});
                        playlist_cb.addItem({label:"Item 2"});
                        playlist_cb.addItem({label:"Item 3"});
                        addChild(playlist_cb);
 
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                }
 
        }

Ошибки:
Код:

TypeError: Error #2007: Параметр child не должен быть равен нулю.
        at flash.display::DisplayObjectContainer/addChildAt()
        at fl.controls::BaseButton/drawBackground()
        at fl.controls::BaseButton/draw()
        at fl.core::UIComponent/drawNow()
        at fl.controls::ComboBox/drawLayout()
        at fl.controls::ComboBox/draw()
        at fl.core::UIComponent/callLaterDispatcher()

TypeError: Error #2007: Параметр child не должен быть равен нулю.
        at flash.display::DisplayObjectContainer/addChildAt()
        at fl.controls::BaseButton/drawBackground()
        at fl.controls::BaseButton/draw()
        at fl.core::UIComponent/callLaterDispatcher()

Добавлено через 17 часов 39 минут
Всё заработало после перезапуска FlashDevelop. Чудеса да и только.


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

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