Flex расширяющий ComboBox - PullRequest
3 голосов
/ 28 июня 2010

Я создал класс CustomCombo.as, который расширяет ComboBox. То, что происходит, - то, что CustomCombo комбинированный список показывает как редактируемый. Я не хочу этого, и я не могу найти свойства для установки editable на false.

Я также пытался установить textInput.editable элемент управления в поле со списком, но безрезультатно.

Любая помощь будет принята с благодарностью.

CustomCombo.as

package custom {

    import spark.components.ComboBox;

    public class CustomCombo extends ComboBox {

        public function CustomCombo() {
            super();
//          this.editable = false; //<-- THIS DOESNT WORK   ***Access of possibly undefined property editable through a reference with static type custom:CustomCombo
//          this.textInput.editable = false; //<-- THIS DOESNT WORK   ***Cannot access a property or method of a null object reference
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

После рытья в Flex 4 API я обнаружил, что они предлагают использовать элемент управления DropDownList.Из того, что я вижу, они удалили свойство editable из элемента управления ComboBox в Flex 4, но я могу ошибаться.

Я реализовал DropDownList, и это решило мою проблему.

1 голос
/ 28 июня 2010

Я вижу, что вы используете спарк, а не mx.Упомянутое мной свойство editable применимо только к списку на основе mx.В искре ComboBox расширяется DropDownListBase и редактируется по умолчанию.

Элемент управления ComboBox является дочерним классом элемента управления DropDownListBase.Как и элемент управления DropDownListBase, когда пользователь выбирает элемент из раскрывающегося списка в элементе управления ComboBox, элемент данных появляется в области подсказок элемента управления.

Одно из различий между элементами управлениячто область подсказки элемента управления ComboBox реализуется с помощью элемента управления TextInput вместо элемента управления Label для элемента управления DropDownList.Поэтому пользователь может редактировать область подсказки элемента управления, чтобы ввести значение, которое не является одним из предопределенных параметров.

Например, элемент управления DropDownList позволяет пользователю выбирать только из списка предопределенных элементовв контроле.Элемент управления ComboBox позволяет пользователю выбрать предварительно определенный элемент или ввести новый элемент в область приглашения.Ваше приложение может распознать, что был введен новый элемент, и, необязательно, добавить его в список элементов в элементе управления.

Элемент управления ComboBox также выполняет поиск в списке элементов, когда пользователь вводит символы в приглашениеплощадь.Когда пользователь вводит символы, открывается раскрывающаяся область элемента управления.Затем он прокручивает и выделяет наиболее близкое совпадение в списке элементов.

Так что в идеале в этом случае следует использовать DropDownList.

Вы получаете нулевую ошибку при попытке получить доступ к textInput из конструктора, потому что он еще не был создан.В элементах управления на основе mx (Flex-3) вы можете получить к нему доступ из обработчика creationComplete;Я не совсем уверен, как это сделать для элементов управления на основе искры.

Обновление: я думаю, что я выяснил, как получить доступ к частям скина в spark (хотя вы могли бы вместо этого использовать DropDownBox).Вы должны переопределить метод partAdded.

override protected function partAdded(partName:String, instance:Object):void
{
    super.partAdded(partName, instance);
    if (instance == textInput)
    {
        textInput.editable = false;
    }
}

Однако есть одна загвоздка: в этом случае она может не работать.Исходный код ComboBox.as говорит, что

API игнорирует визуальные свойства editable и selectable

Итак DropDownListэто так!


Первоначальный ответ, отправленный для mx ComboBox.

Этого не должно быть, поскольку значение по умолчанию для свойства editable равно false.

Попробуйте явно установить значение false из конструктора.

public function CustomCombo() {
  super();
  this.editable = false;
}
...