Autor Beitrag
code19
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 24.05.08 00:08 
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

ausblenden 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:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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.

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
code19 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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