J'utilise l'entrée d'un TextBox pour filtrer les informations affichées dans un ListBox. Je veux que le filtrage se produise chaque fois qu'une touche est pressée.C# Interrompre un événement Key en cours d'exécution à partir d'un TextBox lors de l'événement clé suivant
Le problème auquel je suis confronté est que si l'utilisateur tape un second caractère, un troisième, etc., le filtre se poursuivra pour chacune des touches. Par exemple. L'utilisateur tape 'a' et le filtrage commence, avant que le filtrage de la lettre 'a' ne soit terminé, l'utilisateur ajoute la lettre 'b' pour que la chaîne de recherche complète soit maintenant 'ab'.
À ce stade, je souhaite que le premier filtre s'arrête complètement et redémarre le nouveau filtre sur 'ab'.
private bool Interrupt = false;
private bool Searching = true;
private void tbxFilter_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (Searching)
{
Interrupt = true;
}
}
private void tbxFilter_KeyUp(object sender, KeyEventArgs e)
{
Searching = true;
foreach (MyObject o in ListOfMyObjects)
{
if (Interrupt)
{
Interrupt = false;
break;
}
else
{
DoFilter(o);
}
}
Searching = false;
}
Le code ci-dessus montre à peu près ce que j'ai en ce moment avec quelques pièces spécifiques d'application supprimés (comme les types et les noms d'objets). Ce que je voudrais idéalement faire est de pouvoir faire une pause au début de la deuxième pression sur la touche (jusqu'à ce que Searching ait été défini sur false - indiquant que toutes les autres recherches sont terminées), mais en ajoutant une boucle while pour vérifier cela va juste bloquer le programme à ce moment-là.
Existe-t-il un moyen d'accomplir cela?
Merci
EDIT: Le contrôle qui affiche les éléments est un contrôle ListBox/ListView.
Pourquoi ne pas utiliser la fonction de remplissage automatique de la zone de liste déroulante à la place? Il fait tout pour vous – w69rdy
Le contrôle qui affiche les éléments est un contrôle ListBox ou ListView. Toutes mes excuses pour ne pas avoir précisé cela ci-dessus. – Andy
Non c'est bon je l'ai eu, je me demandais juste s'il devait s'agir d'un ListBox ou si vous pouviez utiliser une combo à la place car il a une fonctionnalité très similaire à ce dont vous avez besoin pour vous éviter d'écrire du tout – w69rdy