この潜在的なバグをFlashのコンボボックスコンポーネントで修正するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3652470

質問

コンボボックスコンポーネントをスプライトに追加すると、コンテナの高さは本来よりも大きくなります。

これが私の意味です:

import fl.controls.ComboBox;
//add combo box inside a container sprite
var combo:ComboBox = new ComboBox();
var container:Sprite = new Sprite();
addChild(container);
container.addChild(combo);
//draw the outline of the container sprite
container.graphics.lineStyle(1,0x009900);
container.graphics.drawRect(0,0,container.width,container.height);
//I don't get this:
trace(combo.height);//outputs 22
trace(container.height);//outputs 101

ノート: ライブラリにコンボボックスコンポーネントが必要になります。このためにフラッシュCS3を使用しています。

私がこのように無効/再描画をした場合:

combo.invalidate(InvalidationType.ALL,true);
combo.drawNow();

高さは101から104に変化します。

解決策はありますか?

アップデート:ConfigUIメソッドをコンボボックスサブクラスで上書きしましたが、測定は常に正しいです。コンテナの高さが100に変わるのはなぜですか?

役に立ちましたか?

解決

これは、Adobeがフラッシュコンポーネントの愚かな移植のためです。フラッシュアイデア内のコンポーネントの2番目のフレームを見ると、初期サイズを返す一時的なアバターがわかります。

enter image description here

これを解決するには、アバターの子供たちを反復し、そのサイズを正常化する必要があります。

public static function normalizedComponent(component:Sprite):void {
    for (var i:int = 0; i < component.numChildren; i++) {
        component.getChildAt(i).height = component.height;
        component.getChildAt(i).width = component.width;
    }
}

利用方法:

var comboBox:ComboBox = new ComboBox();
normalizedComponent(comboBox);
normalizedComponent(comboBox.textField);

他のヒント

「開いた場合、ドロップダウンボックスの高さ」

うーん、ボタンの下のディスプレイリストにリストを追加すると、実際に追加されたポップアップがあると思います。したがって、スプライトには実際にドロップダウンリストが含まれないため、高さはボタンの高さのままになるはずです。

容器の高さが間違っている可能性のある理由は、無効化を経る前に、含まれている子供が原因である可能性があります。たぶん、コンボボックススキン(高さ102pxのモービックリップ)または常に高さ102pxまたは奇妙な高さで始まるコンボボックスサブコンポーネント(ボタンのテキストフィールドは間違っていることがわかっています)。

簡単な解決策は、CreationComplete/追加のイベントまで待って、最終的な高さを確認してから、境界線を描くことです。

私はこれがaだとは思わない ComboBox 排他的なバグ。

コンポーネントを追加するとき ButtonSprite コンテナボタンとコンテナ寸法をトレースすると、さまざまな結果が得られます。実際、私は同じことを受け取ります 100 x 100 結果。

ドロップダウンボックスの可能性を捨てます。 Button コンポーネントにはありません。

回避策は2つのコンポーネントオブジェクトで同じになると思います(ComboBoxButton)、しかし、私はまだ解決策を見つけていません。私がそうするときに更新します。

アップデート:

私はこれを使用して機能させることができました validateNow(), 、そして数分後 - 次のリンクを見つけました。 http://forums.adobe.com/message/816912?tstart=0

基本的に、リンクは私たちに置くように指示します validateNow() 内側に電話します EnterFrame イベント、または内部 SetTimeout 適切なタイミングで。

だから - 私はの表示された高さだと思います コンボボックス それは 実際 高さ-IDEST、開いている場合、ドロップダウンボックスの高さは、そうでない場合はそうではありません。ただし、アイテムはまだそこにありますが、visibleセットがあります , 、それがまだ見えなくても、それはまだ容器を拡張します...したがって、私はそうすると言うでしょう:

container.graphics.drawRect(0, 0, combo.width, combo.height);

それが通常もそれを行う方法です...

このコードの前に手動でセットアップできますか:

container.width=100;

container.height=100;

container.graphics.drawRect(0,0,container.width,container.height);

こんにちは私はどこかで、numericstepperの同様の問題の解決策を見つけました。

解決策は次のとおりです。

var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22; 

あなたの場合、次のことを試してください。

var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22; 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top