0

maxChars編集可能なComboBoxのTextInputのプロパティを設定したいと思います。現在、変更イベントを使用してテキストを設定された文字数にトリミングしています。

private function nameOptionSelector_changeHandler(event:ListEvent):void
{
    nameOptionSelector.text = nameOptionSelector.text.substr(0, MAX_LENGTH);
}

これはやり過ぎのように感じます。これを行うためのより良い方法が必要です...。

4

3 に答える 3

2

私の代替手段は、保護されたtextInputを直接使用することです。このアプローチにより、通常のTextFieldの場合と同じように、「maxChars」プロパティをGUIビルダーまたはコードで設定できます。ゼロはmaxCharsの有効な値であり、無制限の文字を示すことに注意してください。TextInputオブジェクトが存在する前にmaxCharsを設定しようとしないようにするには、.childrenCreated()のオーバーライドが必要です。

package my.controls
{
    import mx.controls.ComboBox;

    public class EditableComboBox extends ComboBox
    {
        public function EditableComboBox()
        {
            super();
        }

        private var _maxChars:int = 0;

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

            // Now set the maxChars property on the textInput field.
            textInput.maxChars = _maxChars;
        }

        public function set maxChars(value:int):void 
        {
            _maxChars = value;
            if (textInput != null && value >= 0)
                textInput.maxChars = value;
        }

        public function get maxChars():int 
        {
            return textInput.maxChars;
        }

  }
}
于 2010-01-27T16:36:51.773 に答える
1

internalのデフォルト値を拡張ComboBoxしてオーバーライドできます。動的に設定する必要がある場合は、パブリックメソッドを追加して、拡張クラスにプロパティを設定できます。maxCharsTextInput

于 2009-05-11T18:59:21.987 に答える
0

Stigglerの提案を使用して、これが私が実装した完全なソリューションです。

package
{
    import mx.controls.ComboBox;

    public class ComboBoxWithMaxChars extends ComboBox
    {
        public function ComboBoxWithMaxChars()
        {
            super();
        }

        private var _maxCharsForTextInput:int;

        public function set maxCharsForTextInput(value:int):void
        {
            _maxCharsForTextInput = value;

            if (super.textInput != null && _maxCharsForTextInput > 0)
                super.textInput.maxChars = _maxCharsForTextInput;
        }

        public function get maxCharsForTextInput():int
        {
            return _maxCharsForTextInput;
        }

        override public function itemToLabel(item:Object):String
        {
            var label:String = super.itemToLabel(item);

            if (_maxCharsForTextInput > 0)
                label = label.substr(0, _maxCharsForTextInput);

            return label;
        }
    }
}
于 2009-05-11T19:50:40.827 に答える