2016-04-01 3 views
3

Drücken Enter-Taste löscht Text von ComboBox wenn Dropdown offen ist in einem ComboBox mit AutoCompleteMode Satz Append.Enter-Taste Ausgabe In ComboBox mit Autocomplete auf Anfügen

Wir wissen in Witwen Formen, wenn die AutocompleteMode Eigenschaft in ComboBoxAppend ist, dann erhalten wir die Werte, bevor wir den vollständigen Text eines Artikels eingeben.

Problem ist hier:

  • ich den Dropdown-Button klicken und die Drop öffnen nach unten
  • ich versuchen, einige Zeichen eingeben, ich die Werte wie erwartet erhalten und vervollständigt den Text.
  • Aber wenn ich drücke Geben Sie es löscht den Text des Kombinationsfelds.

Wie kann ich Append Option und machen auch die Eingabetaste drücken, wenn die Dropdown geöffnet ist, eingegebenen Text halten und entfernen Sie sie nicht.


Ich habe versucht, die Option Keine in der Eigenschaft „Auto komplett Mode“ es gut funktioniert, aber es gibt keine Anfügen von Daten ....

Ich brauche das nicht in die vorschlagen und schlagen anhängen Optionen "Auto complete Mode" -Eigenschaft, da es ein weiteres Dropdown-Fenster öffnet ....

Ich muss Daten eingeben, während die Daten in der Dropdown-Box aufgelistet sind, und wenn ich die Append-Werte nur durch Klicken auf die Eingabetaste erhalten, sollte es funktionieren (ohne gelöscht zu werden) ...

Ist das möglich?

Dank

Antwort

3

Wenn der Drop-Down geschlossen ist, funktioniert es wie erwartet, aber wenn der Drop-Down geöffnet ist, drückt Geben Sie die Drop-down schließt und entfernt eingegebenen Text.

Als Lösung, die Sie von ComboBox und außer Kraft setzen IsInputKey auf diese Weise ableiten:

public class MyComboBox : ComboBox 
{ 
    protected override bool IsInputKey(Keys keyData) 
    { 
     switch ((keyData & (Keys.Alt | Keys.KeyCode))) 
     { 
      case Keys.Enter: 
      case Keys.Escape: 
       if (this.DroppedDown) 
       { 
        this.DroppedDown = false; 
        return false; 
       } 
       break; 
     } 
     return base.IsInputKey(keyData); 
    } 
} 
+0

Danke für die Lösung ... Wo muss ich die Überschreibung methiod enthalten? Muss ich beim Klicken auf das Dropdown-Menü ein Ereignis erstellen und die Überschreibungsmethode dort ausführen? Kannst du mir helfen, die Lösung zu verstehen? –

+0

Wie Sie in der Antwort sehen, sollten Sie eine neue Klasse 'MyComboBox' erstellen, die von' ComboBox' geerbt wurde und diese anstelle von 'ComboBox' verwenden. –

+0

Ich habe diese Klasse in meiner form.cs Datei erstellt ... und ich habe meinen vorherigen Code, wo ich die Combobox_commodity verwenden, um mehr als 100 Datensätze anzuzeigen .... Wie kann ich diese Klasse mit der bereits vorhandenen Commodity-Box erben? Es tut mir leid, ich bin neu in diesem Winforms bitte in diesem eine Anleitung .... –