Heim >Backend-Entwicklung >C++ >Wie implementiert man eine benutzerdefinierte automatische Vervollständigung in C# mithilfe eines benutzerdefinierten Ereignishandlers?

Wie implementiert man eine benutzerdefinierte automatische Vervollständigung in C# mithilfe eines benutzerdefinierten Ereignishandlers?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 17:50:10668Durchsuche

How to Implement Custom Autocomplete in C# Using a Custom Event Handler?

C#-Autovervollständigung mit benutzerdefiniertem Ereignishandler

Problem:

Eine Autovervollständigungsfunktion wird für ein Textfeld implementiert, in dem Ergebnisse angezeigt werden stammen aus einer Datenbank im Format „[001] Last, First Middle“. Die aktuelle Implementierung erfordert die Eingabe von „[001]“, um die Suche zu starten, obwohl das gewünschte Verhalten darin besteht, die automatische Vervollständigung basierend auf der Eingabe des Vornamens zu ermöglichen, z. B. „John“ sollte „[001] Smith, John D.“ zurückgeben

Lösung:

Die integrierte AutoComplete-Funktionalität in C# unterstützt nur die präfixbasierte Suche und macht es somit möglich für diese Anforderung ungeeignet. Eine Problemumgehung besteht darin, eine benutzerdefinierte Autovervollständigungsfunktion zu erstellen, indem das OnTextChanged-Ereignis behandelt und das gewünschte Verhalten programmgesteuert implementiert wird.

Implementierung:

Eine ListBox wird unterhalb des Textfelds und seines Textfelds hinzugefügt Die Sichtbarkeit ist zunächst auf „false“ gesetzt. Wenn der Benutzer Text in das Textfeld eingibt, wird das OnTextChanged-Ereignis des Textfelds ausgelöst. Der Handler führt die folgenden Schritte aus:

  1. Löscht die vorhandenen Elemente in der Listbox.
  2. Wenn der Text der Textbox leer ist, wird die Listbox ausgeblendet.
  3. Iteriert durch die Werte in der AutoCompleteCustomSource des Textfelds.
  4. Wenn ein Wert den in das Textfeld eingegebenen Text enthält, wird hinzugefügt den Wert in die Listbox und setzt ihre Sichtbarkeit auf true.

Wenn ein Element in der Listbox ausgewählt wird, wird das SelectedIndexChanged-Ereignis der Listbox ausgelöst und der Text des ausgewählten Elements wird in die Listbox kopiert Die Texteigenschaft der Textbox. Dadurch wird der Autovervollständigungsprozess abgeschlossen und das Listenfeld ausgeblendet.

Codebeispiel:

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
    listBox1.Items.Clear();
    if (textBox1.Text.Length == 0)
    {
        hideResults();
        return;
    }

    foreach (String s in textBox1.AutoCompleteCustomSource)
    {
        if (s.Contains(textBox1.Text))
        {
            Console.WriteLine("Found text in: " + s);
            listBox1.Items.Add(s);
            listBox1.Visible = true;
        }
    }
}

void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();
    hideResults();
}

void hideResults()
{
    listBox1.Visible = false;
}

Diese Lösung bietet ein rudimentäres Beispiel für eine benutzerdefinierte Autovervollständigungsfunktion, die weiter verbessert werden kann basierend auf spezifischen Anforderungen. Es demonstriert jedoch das Prinzip der Verarbeitung von Texteingaben und der dynamischen Aktualisierung der Liste der vorgeschlagenen Werte.

Das obige ist der detaillierte Inhalt vonWie implementiert man eine benutzerdefinierte automatische Vervollständigung in C# mithilfe eines benutzerdefinierten Ereignishandlers?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn