2009-05-11 11 views
0

Ich möchte die maxChars Eigenschaft des TextInput einer bearbeitbaren ComboBox festlegen. Ich trimm derzeit den Text auf eine bestimmte Anzahl von Zeichen mit einer Änderung Ereignis:Wie kann ich "maxChars" des TextInput in einer editierbaren ComboBox setzen?

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

Das fühlt sich an wie Overkill. Es muss einen besseren Weg geben, dies zu tun ....

Antwort

1

Sie könnten ComboBox erweitern und den Standardwert maxChars Wert für den internen TextInput überschreiben. Wenn Sie es dynamisch festlegen müssen, können Sie eine öffentliche Methode hinzufügen, um die Eigenschaft für die erweiterte Klasse festzulegen.

+0

Das war mein ursprünglicher Gedanke und stellt sich als eine sehr gute Idee heraus. Volle Lösung unter ... –

0

den Vorschlag von Stiggler Verwendung, hier ist die vollständige Lösung, die ich umgesetzt:

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

Ich habe eine "inkompatible override", wenn ich versucht, dies zu kompilieren, wahrscheinlich wegen der öffentlichen Funktion itemToLabel (Element: Object, ... Rest): String-Prototyp. Ich wüsste nicht wirklich, was ich mit diesen Parametern machen soll (ich vermute, dass es nichts zu tun gibt). Welches SDK verwenden Sie? Ich benutze 3,5 – Opux

2

Meine Alternative ist direkt auf den geschützten textinput zu verwenden. Dieser Ansatz ermöglicht die Festlegung der Eigenschaft "maxChars" im GUI-Builder oder -Code, genau wie bei einem normalen TextField. Beachten Sie, dass Null ein gültiger Wert für maxChars ist und unbegrenzte Zeichen angibt. Die Außerkraftsetzung von .childrenCreated() ist erforderlich, um zu vermeiden, dass maxChars festgelegt wird, bevor das TextInput-Objekt existiert.

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

    } 
}