Maison >développement back-end >C++ >Comment implémenter une fonctionnalité de saisie semi-automatique flexible au-delà de la correspondance de préfixe en C# ?

Comment implémenter une fonctionnalité de saisie semi-automatique flexible au-delà de la correspondance de préfixe en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-01 06:41:09296parcourir

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

Implémentation de la saisie semi-automatique flexible pour C

En C#, lors de l'ajout d'une fonctionnalité de saisie semi-automatique à une zone de texte, la solution existante autorise uniquement la recherche basée sur un préfixe. Pour surmonter cette limitation et permettre des options de recherche plus flexibles, une implémentation personnalisée est nécessaire.

Une approche consiste à remplacer l'événement OnTextChanged et à implémenter une logique de saisie semi-automatique personnalisée. Ceci peut être réalisé en créant une vue de liste sous la zone de texte et en la remplissant dynamiquement en fonction des entrées de l'utilisateur.

Par exemple, voici une implémentation rudimentaire :

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;
}

Cette approche vous permet pour rechercher des éléments quelle que soit leur position dans la chaîne. Vous pouvez encore améliorer la mise en œuvre en ajoutant des fonctionnalités supplémentaires telles que l'ajout de texte, la capture de commandes clavier, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn