Laden...

gebundene DropDown Combobox, falsche Eingabe abfangen

Erstellt von ill_son vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.596 Views
I
ill_son Themenstarter:in
227 Beiträge seit 2009
vor 11 Jahren
gebundene DropDown Combobox, falsche Eingabe abfangen

Hallo,

in meiner Anwendung gibt es eine ComboBox im DropDown Style, welche an eine BindingList gebunden ist (alles integer). Da diese Liste recht lang sein kann, möchte ich, dass man nicht durch eine ewig lange DropDownListe scrollen muss, sondern im Textfeld die Werte auch direkt eingeben kann, allerdings nur die, die es in der BindingSource auch gibt. Nun meine Frage: wie fange ich ab, wenn ein Benutzer einen nicht existenten Wert eingibt, ohne gleich die ganze Liste durchsuchen zu müssen. Gibt es da ein event, das ich verwenden könnte. Stehe etwas auf dem Schlauch gerade.

Code:


private BindingList<CheckBoxItem> nodes;

nodes = new BindingList<CheckBoxItem>();

this.cmbSupportNode.DataSource = nodes;
this.cmbSupportNode.DisplayMember = "Name";
this.cmbSupportNode.ValueMember = "Value";
this.cmbSupportNode.DataBindings.Add(new Binding("SelectedValue", this.data, "ire"));

Danke, Alex

Final no hay nada más

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo ill_son

Du kannst die Liste einfach Filtern nach dem Text. Wird etwas nicht vorhandenes eingegeben, ist die Auswahl in der ComboBox leer.

Beste Grüsse

Diräkt

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo ill_son,

lass den Benutzer eingeben, was er will und prüfe erst am Ende, also z.B. im Validating.

Hat der Benutzer etwas eingegeben, was in der Liste vorhanden ist, dann dann sollte ein Eintrag selektiert sein und wenn nicht dann nicht.

Wenn man sich generell und unabhängig vom GUI die Frage stellt, ob ein Eintrag in einer Liste vorhanden ist, kommt es darauf an.

Wenn die Liste sortiert ist, kann man binäre Suche verwenden.

Wenn man die Liste nicht sortiert ist, aber man sie nur einmal oder nur weniger Male durchsuchen muss oder sie relativ klein ist, kann man lineare Suche verwenden.

Wenn die Liste groß ist, aber man sie häufig oder sehr häufig durchsuchen muss, sollte man alle Werte aus der Liste in ein HashSet packen. Dann kann man mit HashSet.Contains in konstanter Zeit (also unabhängig von der Größe der Liste) ermitteln, ob ein Wert enthalten ist.

herbivore

R
158 Beiträge seit 2007
vor 11 Jahren

Wie wäre es mit AutoComplete? Weitere Infos auch bei MSDN ComboBox.AutoCompleteMode-Eigenschaft

Wie bei dem Beispiel AutoComplete ComboBox in Visual C# 2010 gezeigt, werden die Benutzereingaben schon passend vorgefiltert.

I
ill_son Themenstarter:in
227 Beiträge seit 2009
vor 11 Jahren

Hey raiguen,

vielen Dank für den Tipp. Auf AutoComplete bin ich bei weiterm Rumprobieren nun auch gestoßen. Das gefällt mir. In Verbindung mit einem ErrorProvider ist das, denke ich, eine gute Lösung.

Grüße, Alex

Final no hay nada más