Entwickler-Ecke
Basistechnologien - listBox und Regex
code19 - Sa 24.05.08 00:08
Titel: listBox und Regex
Hallo an Alle
Ich habe erst vor Kurzem mit C# Programmierung angefangen (früher php).
Ich versuche eine Art Lexikon zu Programmieren. Ich habe ein TextBox und ein listBox, in dem eine Liste Begriffe vorkommen. Ich möchte, dass ich beim schreiben des ersten Buchstaben im TextBox gleich nach dem erst möglichen Begriff (im listBox) gesprungen wird. Ich dachte, am besten wäre Regex für mein Vorhaben geeignet, nur ich weiß nicht, wie.
In dem beispiel wird der Begriff selektiert, wenn ich das ganze Wort im TextBox schreibe
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void textBox1_TextChanged(object sender, EventArgs e) { string tBoxText = textBox1.Text; int tLength = tBoxText.Length; string low = tBoxText.Substring(0, 1).ToLower(); string up = low.ToUpper(); string rest = tBoxText.Substring(1, tLength-1); string str = "[" + low + "|" + up + "]" + rest;
listBox1.SelectedItem = tBoxText; } |
str ist praktisch die gesuchte Syntax für Regexp
wenn ich folgendes versuchen würde:
C#-Quelltext
1: 2:
| var selItem = listBox1.SelectedItem; if(Regex.IsMatch(selItem.ToString(), str)) selItem = tBoxText; |
dann habe ich sicher einen Fehler
ich bedanke mich im Voraus für jede Hilfe
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Sa 24.05.2008 um 00:22Moderiert von
Christian S.: Topic aus Sonstiges (.NET) verschoben am So 25.05.2008 um 12:42
code19 - Sa 24.05.08 13:18
Hi
Mir ist die Lösung nach einer Weile doch eingefallen. Ich schreibe sie hier, vielleicht gibt es bessere Vorschläge oder kann für andere nützlich sein.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| private void textBoxSuchen_TextChanged(object sender, EventArgs e) { string tBoxText = textBoxSuchen.Text; if (tBoxText != "") { int tLength = tBoxText.Length; string low = tBoxText.Substring(0, 1).ToLower(); string up = low.ToUpper(); string rest = tBoxText.Substring(1, tLength - 1); string str = "^[" + low + "|" + up + "]" + rest;
string foundItem = ""; for (int i = 0; i < listBox1.Items.Count; i++) { if (Regex.IsMatch(listBox1.Items[i].ToString(), str)) { foundItem = listBox1.Items[i].ToString(); break; } } listBox1.SelectedItem = foundItem; } } |
Danke trotzdem vor allem an die Betreiber des Forums :)
Christian S. - Sa 24.05.08 13:27
Hallo!
Also zuerst einmal scheinst Du die Listbox zur Datenhaltung zu verwenden, das sollte man nicht tun. Die GUI sollte immer nur Anzeige von Daten herhalten.
Außerdem würde ich sagen, brauchst Du gar keinen Regex für das, was Du machen willst. Es sollte auch so gehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| if (tBoxText != "") { for (int i = 0; i < listBox1.Items.Count; i++) { if (((String)listBox1.Items[i]).StartsWith(tBoxText.Text, StringComparison.CurrentCultureIgnoreCase)) { listBox1.SelectedIndex = i; break; } } } |
Grüße
Christian
code19 - Sa 24.05.08 13:51
Hallo Christian
Vielen dank für deinen Vorschlag. Es klappt auch sehr gut. Nur das tBoxText ist vorher definiert
if (((String)listBox1.Items[i]).StartsWith(tBoxText, StringComparison.CurrentCultureIgnoreCase))
Habe viel gelernt :)
Gruß
Ayman
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!