Flex扩展ComboBox

时间:2010-06-28 07:52:52

标签: flex actionscript-3 combobox flex4

我创建了一个扩展CustomCombo.as的课程ComboBox。发生的事情是CustomCombo组合框显示为可编辑。我不想要这个,我无法找到将editable设置为false的属性。

我也尝试将组合框的textInput.editable控件设置为false,但无济于事。

非常感谢任何帮助。

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 个答案:

答案 0 :(得分:2)

在浏览Flex 4 API后,我发现他们建议使用DropDownList控件。我可以看到他们从Flex 4中的editable控件中删除了ComboBox属性,但我可能错了。

我实施了DropDownList,这解决了我的问题。

答案 1 :(得分:1)

我看到你使用的是火花而不是mx。我引用的editable属性仅适用于基于mx的列表。在spark中,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;
    }
}

虽然有一个问题:在这种情况下它可能不起作用。 source code of ComboBox.as表示

  

API会忽略视觉editableselectable属性

所以DropDownList就是这样!


初步回答,发布于mx ComboBox

这不应该发生,因为editable属性的默认值是false

尝试从构造函数中将值显式设置为false

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