【问题标题】:Flex extending ComboBoxFlex 扩展 ComboBox
【发布时间】:2010-06-28 07:52:51
【问题描述】:

我创建了一个扩展ComboBox 的类CustomCombo.as。发生的事情是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
        }
    }
}

【问题讨论】:

    标签: apache-flex actionscript-3 combobox flex4


    【解决方案1】:

    翻遍 Flex 4 API 后,我发现他们建议使用 DropDownList 控件。据我所知,他们从 Flex 4 中的 ComboBox 控件中删除了 editable 属性,但我可能错了。

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

    【讨论】:

      【解决方案2】:

      我看到您使用的是 spark 而不是 mx。我提到的editable 属性仅适用于基于 mx 的列表。在 spark 中,ComboBox 扩展了 DropDownListBase 并且默认情况下是可编辑的。

      ComboBox 控件是DropDownListBase 控件的子类。与DropDownListBase控件一样,当用户从ComboBox控件的下拉列表中选择一项时,该数据项出现在控件的提示区。

      控件之间的一个区别是ComboBox 控件的提示区域是通过使用TextInput 控件实现的,而不是DropDownList 控件的Label 控件。因此,用户可以编辑控件的提示区域以输入不是预定义选项之一的值。

      例如,DropDownList 控件只允许用户从控件中的预定义项目列表中进行选择。 ComboBox 控件允许用户选择一个预定义的项目,或者在提示区域中输入一个新项目。您的应用程序可以识别已输入一个新项目,并可选择将其添加到控件中的项目列表中。

      当用户在提示区域输入字符时,ComboBox 控件也会搜索项目列表。当用户输入字符时,控件的下拉区域会打开。然后它会滚动到并突出显示项目列表中最接近的匹配项。

      因此,理想情况下,您应该在这种情况下使用DropDownList

      尝试从构造函数访问textInput 时出现空错误,因为它尚未创建。在基于 mx 的控件 (Flex-3) 中,您可以从 creationComplete 处理程序访问它;我不太确定如何为基于 spark 的控件执行此操作。

      更新:我想我已经知道如何在 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;
      }
      

      【讨论】:

      • 我已经试过了。我收到以下错误; '通过静态类型 custom:CustomCombo 的引用访问可能未定义的属性可编辑'。
      • +1 试图提供帮助,但我在 Flex 4 API 中找到了解决方案。查看我发布的答案
      • @Pieter 很高兴您自己解决了这个问题。请参阅我的更新 - 在这种特殊情况下并没有真正的帮助,但以后可能会证明有用。
      猜你喜欢
      • 2015-04-15
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2020-04-24
      相关资源
      最近更新 更多