Как я могу установить «maxChars» TextInput в редактируемом ComboBox? - PullRequest
0 голосов
/ 11 мая 2009

Я хочу установить свойство maxChars TextInput редактируемого ComboBox. В настоящее время я обрезаю текст до заданного количества символов, используя событие Event:

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

Это похоже на излишество. Должен быть лучший способ сделать это ....

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Моя альтернатива - использовать защищенный textInput напрямую. Этот подход позволяет установить свойство maxChars в компоновщике или коде GUI, как это делается для обычного TextField. Обратите внимание, что ноль является допустимым значением для maxChars и указывает на неограниченное количество символов. Переопределение .childrenCreated () необходимо, чтобы не пытаться установить maxChars до того, как объект TextInput существует.

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;
        }

  }
}
1 голос
/ 11 мая 2009

Вы можете расширить ComboBox и переопределить значение по умолчанию maxChars для внутреннего TextInput. Если вам нужно установить его динамически, вы можете добавить открытый метод для установки свойства в расширенном классе.

0 голосов
/ 11 мая 2009

Используя предложение Стигглера, вот полное решение, которое я реализовал:

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;
        }
    }
}
...