如何在可编辑的 ComboBox 中设置 TextInput 的“maxChars”?

Posted

技术标签:

【中文标题】如何在可编辑的 ComboBox 中设置 TextInput 的“maxChars”?【英文标题】:How can I set "maxChars" of the TextInput in an editable ComboBox? 【发布时间】:2010-10-25 08:52:00 【问题描述】:

我想设置可编辑 ComboBox 的 TextInput 的 maxChars 属性。我目前正在使用更改事件将文本修剪为一定数量的字符:

private function nameOptionSelector_changeHandler(event:ListEvent):void

    nameOptionSelector.text = nameOptionSelector.text.substr(0, MAX_LENGTH);

这感觉有点矫枉过正。必须有更好的方法来做到这一点......

【问题讨论】:

【参考方案1】:

我的替代方法是直接使用受保护的 textInput。这种方法允许在 GUI 构建器或代码中设置“maxChars”属性,就像对普通 TextField 所做的那样。请注意,零是 maxChars 的有效值,表示字符数不限。需要覆盖 .childrenCreated() 以避免在 TextInput 对象存在之前尝试设置 maxChars。

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;
        

  

【讨论】:

【参考方案2】:

您可以扩展ComboBox 并覆盖内部TextInput 的默认maxChars 值。如果需要动态设置,可以添加公共方法来设置扩展类的属性。

【讨论】:

这是我最初的想法,结果证明是一个非常好的想法。下面的完整解决方案...【参考方案3】:

使用 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;
        
    

【讨论】:

当我试图编译这个时,我得到了一个“不兼容的覆盖”,可能是因为 public function itemToLabel(item:Object, ... rest):String 原型。我真的不知道用这些参数做什么(我的猜测是没有什么可做的)。你用的是什么SDK?我正在使用 3.5

以上是关于如何在可编辑的 ComboBox 中设置 TextInput 的“maxChars”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 中使用图案图像在可扩展的 tableViewCell 中设置 UIButton

如何根据条件在可折叠面板中设置折叠值?-EXTJS

如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?

风格错误?无法在 Windows10 中的样式中设置背景颜色

关于easyui combobox

在 Python-GTK3 中设置条目文本的 set_text 在哪里?