Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамически создать Component типа ComboBox (http://www.flasher.ru/forum/showthread.php?t=101334)

xception 16.09.2007 17:58

Динамически создать Component типа ComboBox
 
Всем привет.
Возникла необходимость создать динамически компонент в AS3 и вытащить его в мувик. Создание компонента надо запихнуть в класс.
Собственно есть мувик, есть файл MyControl.as находящийся в директории control относительно мувика.

MyControl.as
Код:

package control
{
        import fl.controls.ComboBox;
        import flash.display.MovieClip;

        public class MyControl {
                public var c:ComboBox;
               
                public function MyControl (parMc:MovieClip){
                        c = new ComboBox();
                        parMc.addChild(c);
                }
        }
}

В первом фрейме клипа код
Код:

import control.MyControl;
var ctrl:MyControl = new MyControl(this);

При запуске выдает сообщения (ругается на MyControl.as):
1046: Type was not found or was not a compile-time constant: ComboBox.
1180: Call to a possibly undefined method ComboBox.
1172: Definition fl.controls:ComboBox could not be found.

Однако, если вытащить на сцену один компонент вручную, то он без проблем создает и мой динамически.

Подскажите пожалуйста почему он не может ComboBox импортировать из fl.controls если в мувик не вытащен компонент? Как это можно обойти?

Спасибо заранее.

etc 16.09.2007 18:18

Надо положить компонент комбобокса в библиотеку.

xception 16.09.2007 18:21

Спасибо, понятно.

STILL.05 22.02.2008 13:26

использую ComboBox
запускаю swf через FlashCS3 все работает нормально
если запустить swf через плеер то нифига не работает
ругается на ошибку в строчке
Код:

comboBox = new ComboBox()
вот текст ошибки
Код:

TypeError: Error #2007: Parameter type must be non-null.
        at flash.events::EventDispatcher/addEventListener()
        at fl.core::UIComponent/fl.core:UIComponent::callLater()
        at fl.core::UIComponent/invalidate()
        at fl.core::UIComponent/setSharedStyle()
        at fl.managers::StyleManager$/fl.managers:StyleManager::setSharedStyles()
        at fl.managers::StyleManager$/registerInstance()
        at fl.core::UIComponent$iinit()
        at fl.controls::ComboBox$iinit()
        at EnvironmentTest/EnvironmentTest::initSpeed()[D:\package\EnvironmentTest.as:91]

кто знает в чем проблема?

Olegg 22.02.2008 13:56

Код:

var comboBox:comboBox = new ComboBox();
может так...тее ж надо загнать в переменную типа comboBox и с ней уже работать.

STILL.05 22.02.2008 17:19

не понял, вы о чем?

FilimoniC 25.02.2008 03:34

Изнутри конструктора вызывается addEventListener(type,function)? Так может type в каком-то из случаев null ? Скорее всего проблема там

STILL.05 26.02.2008 12:20

:( :rtfm: :wacko:
удалил из кода все ссылки на объект comboBox
создаю его в методе Init
Код:

private function Init():void {
      var comboBox:ComboBox = new ComboBox()
}

все равно выдает туже ошибку :(


мало того взял из хелпа код (точная копия из хелпа)
Код:

import fl.controls.*;
import fl.containers.*;
import fl.controls.listClasses.*;
import fl.controls.dataGridClasses.*;
import fl.controls.progressBarClasses.*;
import fl.core.UIComponent;
import fl.data.DataProvider;

var dp:DataProvider = new DataProvider();
dp.addItem( { label: "BaseScrollPane",    data:BaseScrollPane } );
dp.addItem( { label: "Button",            data:Button } );
dp.addItem( { label: "CellRenderer",    data:CellRenderer } );
dp.addItem( { label: "CheckBox",        data:CheckBox } );
dp.addItem( { label: "ColorPicker",    data:ColorPicker } );
dp.addItem( { label: "ComboBox",        data:ComboBox } );
dp.addItem( { label: "DataGrid",        data:DataGrid } );
dp.addItem( { label: "HeaderRenderer",    data:HeaderRenderer } );
dp.addItem( { label: "ImageCell",        data:ImageCell } );
dp.addItem( { label: "IndeterminateBar",data:IndeterminateBar } );
dp.addItem( { label: "Label",            data:Label } );
dp.addItem( { label: "List",            data:List } );
dp.addItem( { label: "NumericStepper",    data:NumericStepper } );
dp.addItem( { label: "ProgressBar",    data:ProgressBar } );
dp.addItem( { label: "RadioButton",    data:RadioButton } );
dp.addItem( { label: "ScrollPane",        data:ScrollPane } );
dp.addItem( { label: "Slider",            data:Slider } );
dp.addItem( { label: "TextArea",        data:TextArea } );
dp.addItem( { label: "TextInput",        data:TextInput } );
dp.addItem( { label: "TileList",        data:TileList } );
dp.addItem( { label: "UILoader",        data:UILoader } );
dp.addItem( { label: "UIComponent",    data:UIComponent } );

var cb:ComboBox = new ComboBox();
cb.move(10,10);
cb.setSize(300,25);
cb.prompt = "Select a component to view its styles";
cb.rowCount = 12;
cb.dataProvider = dp;
cb.addEventListener(Event.CHANGE, showStyleDefinition);
addChild(cb);

var dg:DataGrid = new DataGrid();
dg.setSize(425,300);
dg.move(10,50);
dg.columns = [ new DataGridColumn("StyleName"), new DataGridColumn("DefaultValue") ];
addChild(dg);

function showStyleDefinition(e:Event):void {
    var componentClass:Class = e.target.selectedItem.data as Class;
    var styles:Object = componentClass["getStyleDefinition"].call(this);
    trace(styles.toString());
    var styleData:DataProvider = new DataProvider();
    for(var i:* in styles) {
        trace(i + " : " + styles[i]);
        styleData.addItem( { StyleName:i, DefaultValue:styles[i] } );
    }
    styleData.sortOn("StyleName");
    dg.dataProvider = styleData;
}

если открыть уже скомпиленный swf во FlashCS3 то все работает
если открыть swf через плеер но нифига не работает
подскажите плиз, в чем может быть проблема?

etc 26.02.2008 13:42

Проверил. Все работает.

CrazyFlasher 26.02.2008 14:31

вы случайно открываете не через 8-ой плеер?

STILL.05 26.02.2008 16:10

нашел причину
у меня стоял плеер 9 версии но ниже чем 9,0,115,0
стоял кажется 9,0,12,0
загрузил с adobe.com последнюю версию, все заработало


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

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