Heim >Backend-Entwicklung >C++ >Wie implementiert man in C# eine flexible AutoComplete-Funktionalität, die über den Präfixabgleich hinausgeht?

Wie implementiert man in C# eine flexible AutoComplete-Funktionalität, die über den Präfixabgleich hinausgeht?

Barbara Streisand
Barbara StreisandOriginal
2025-01-01 06:41:09296Durchsuche

How to Implement Flexible AutoComplete Functionality Beyond Prefix Matching in C#?

Implementierung von flexiblem AutoComplete für C

In C# erlaubt die vorhandene Lösung beim Hinzufügen einer Autovervollständigungsfunktion zu einem Textfeld nur die Suche basierend auf einem Präfix. Um diese Einschränkung zu überwinden und flexiblere Suchoptionen zu ermöglichen, ist eine benutzerdefinierte Implementierung erforderlich.

Ein Ansatz besteht darin, das OnTextChanged-Ereignis zu überschreiben und eine benutzerdefinierte Logik zur automatischen Vervollständigung zu implementieren. Dies kann erreicht werden, indem unterhalb des Textfelds eine Listenansicht erstellt und diese basierend auf Benutzereingaben dynamisch gefüllt wird.

Hier ist beispielsweise eine rudimentäre Implementierung:

public Form1()
{
    InitializeComponent();

    acsc = new AutoCompleteStringCollection();
    textBox1.AutoCompleteCustomSource = acsc;
    textBox1.AutoCompleteMode = AutoCompleteMode.None;
    textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
}

private void button1_Click(object sender, EventArgs e)
{
    acsc.Add("[001] some kind of item");
    acsc.Add("[002] some other item");
    acsc.Add("[003] an orange");
    acsc.Add("[004] i like pickles");
}

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 listBox1_LostFocus(object sender, System.EventArgs e)
{
    hideResults();
}

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

Dieser Ansatz ermöglicht Ihnen um nach Elementen zu suchen, unabhängig von ihrer Position in der Zeichenfolge. Sie können die Implementierung weiter verbessern, indem Sie zusätzliche Funktionen wie das Anhängen von Text, das Erfassen von Tastaturbefehlen und mehr hinzufügen.

Das obige ist der detaillierte Inhalt vonWie implementiert man in C# eine flexible AutoComplete-Funktionalität, die über den Präfixabgleich hinausgeht?. 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