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(01).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 user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Sa 24.05.2008 um 00:22
Moderiert von user profile iconChristian 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(01).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