1

私の問題は、タイトルでほとんど説明されています。ほんの少しの詳細.. カスタム コンポーネント (ComboBox に基づく) を作成し、いくつかの基本メソッドをオーバーライドしています。最近、固定幅ではなくパーセントで幅を設定すると、奇妙な動作をすることがわかりました。commitPropertiesメソッドを継続的に呼び出し、最終的に失敗する傾向があります。幅を固定値に設定すると、すべてが魅力のように機能します。実装するために何が欠けていますか? ここにいくつかのコードがあります..

override protected function commitProperties():void {
        super.commitProperties();

        //some stuff ...

        TextInput(textInput).setSelection(cursorPosition, cursorPosition);
        if (cursorPosition == textInput.text.length || cursorPosition == 0) {
            TextInput(textInput).horizontalScrollPosition = (cursorPosition == 0) ? 0 : textInput.width;
        }
    }

ここではtextInput.width、どちらの場合も、計算された値を適切に返します。また、必要に応じて、次のようにします。

override protected function measure():void {
        super.measure();
        measuredWidth = 160;
    }

他に何か必要かどうかはわかりません..必要があるかどうか尋ねてください。前もって感謝します :)

4

2 に答える 2

3

この問題は明らかではありませんがsuper.commitProperties();、オーバーライドさcommitProperties()れた実装の最初ではなく、最後に呼び出すことをお勧めします。

ブロックがプロパティを無効にする場合、最初の行で//some stuff...呼び出した場合、正しく処理されません。super.commitProperties();

于 2011-04-01T16:35:40.930 に答える
0

残念ながら、完全なコードなしでこの種の問題をデバッグすることはできません...

Flex 3 MX ComboBox を拡張してComboBase.updateDisplayList()いる場合は、textInput がいつどのようにサイズ変更されるかを理解するために見てください。

textInput.widthで更新されるComboBase.updateDisplayList()ため、 の実行中はこの値に依存しないでくださいcommitProperties()。スクロール位置ロジックをupdateDisplayList()コンポーネントの最後に移動してみてください (この時点で幅を更新する必要があります)。

幸運を!

于 2011-04-04T09:51:32.963 に答える