none
Autocomplete in Textbox erzwingen? RRS feed

  • Frage

  • Hallo,

    ich habe eine Textbox hier, welche ich mit mit Autovervollständigen (SuggestAppend) vervollständigen lasse. Nun möchte ich, dass der Benutzer nur Werte aus der AutoCompleteStringCollection eingeben kann und nichts anderes möglich ist. Mit einer Combobox habe ich es schon versucht, allerdings sind es einfach zu viele Werte, als dass man diese einfach durchscrollen könnte.

    Jemand eine Idee zur Realisierung?

    Danke!

    Donnerstag, 23. Februar 2012 10:25

Antworten

  • Hi,

    du kannst beim TextChanged Ereignis der TextBox abfragen , ob der Wert in der textbox in deiner Autocomplete Liste ist. 

    private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (!string.IsNullOrEmpty(_autCompleteList.Find(p => p.StartsWith(textBox1.Text)))) return;
                textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
                textBox1.SelectionStart = textBox1.Text.Length;
                textBox1.ScrollToCaret();
            }

    Mal aus einem alten Projekt kopiert

    EDIT: Du kannst auch das KeyDown Eregnis abfangen , die Prüfung belibt die Selbe, du kannst aber dann mit den KeyEventArgs SuporessKeyPress auf true setzten

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
    if (!string.IsNullOrEmpty(_vtNumbers.Find(p => p.StartsWith(textBox1.Text)))) return;
    e.SuppressKeyPress = true;
                
            }


    • Bearbeitet Pawel Warmuth Donnerstag, 23. Februar 2012 10:40
    • Als Antwort markiert r33n Donnerstag, 23. Februar 2012 15:22
    Donnerstag, 23. Februar 2012 10:38

Alle Antworten

  • Hi,

    du kannst beim TextChanged Ereignis der TextBox abfragen , ob der Wert in der textbox in deiner Autocomplete Liste ist. 

    private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (!string.IsNullOrEmpty(_autCompleteList.Find(p => p.StartsWith(textBox1.Text)))) return;
                textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
                textBox1.SelectionStart = textBox1.Text.Length;
                textBox1.ScrollToCaret();
            }

    Mal aus einem alten Projekt kopiert

    EDIT: Du kannst auch das KeyDown Eregnis abfangen , die Prüfung belibt die Selbe, du kannst aber dann mit den KeyEventArgs SuporessKeyPress auf true setzten

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
    if (!string.IsNullOrEmpty(_vtNumbers.Find(p => p.StartsWith(textBox1.Text)))) return;
    e.SuppressKeyPress = true;
                
            }


    • Bearbeitet Pawel Warmuth Donnerstag, 23. Februar 2012 10:40
    • Als Antwort markiert r33n Donnerstag, 23. Februar 2012 15:22
    Donnerstag, 23. Februar 2012 10:38
  • Hi,

    erst einmal vielen Dank. Ja so habe ich mir das fast gedacht... dachte nur es gibt vielleicht eine elegantere Lösung!

    Danke!

    Donnerstag, 23. Februar 2012 15:22