La sélection d’un élément dans la liste de suggestions de saisie semi-automatique déclenche l’événement KeyDown avec la touche Entrée.

Dans Winforms, j’ai une zone de texte avec AutoCompleteMode défini sur SuggestAppend et un ensemble AutoCompleteCustomSource. Lorsque l’utilisateur tape des lettres, la liste de suggestions est affichée. Si un élément de cette liste est sélectionné en cliquant dessus, l’événement KeyDown du formulaire contenant la zone de texte est déclenché pour la touche Entrée.

Est-il possible de NE PAS déclencher cet événement lors de la sélection d’un élément suggéré avec la souris?

La fonctionnalité de saisie semi-automatique a quelques particularités héritées de son utilisation initiale, la zone d’adresse d’Internet Explorer. Cela inclut l’émission de la touche Entrée lorsque vous cliquez sur un élément de la liste. Si vous appuyez sur Entrée dans la zone d’adresse d’IE, vous accédez à l’URL saisie.

Vous ne pouvez rien y faire, l’interface native (IAutoComplete2) n’a que très peu d’options pour configurer son fonctionnement. Il insère les frappes dans la zone de texte en simulant des messages Windows. Ce qui est un moyen de faire la différence, la clé réelle ne sera pas enfoncée. Vous pouvez vérifier quelque chose en appelant GetKeyState (), comme ceci:

private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter && GetKeyState(Keys.Enter) < 0) { Console.WriteLine("Really down"); } } [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern short GetKeyState(Keys key); 

Vous pouvez attraper les clés:

 private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //Do nothing or something } }