Empêcher le <enter> dans une combobox.

Résolu
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 17 sept. 2014 à 11:24
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 22 sept. 2014 à 11:29
Bonjour,


Je suis en visual basic 2013 et j'ai un souci.

J'ai une combobox (cboLocalite01) qui se remplit correctement.
En voici le code :

cboLocalite01.Items.Clear()
For ll As Integer = 1 To TableCPostaux.maxcp(indPays)
cboLocalite01.Items.Add(TableCPostaux.tableCPostaux(1, ll))
Next ll
cboLocalite01.DropDownStyle = ComboBoxStyle.Simple
cboLocalite01.AutoCompleteMode = AutoCompleteMode.SuggestAppend
cboLocalite01.AutoCompleteSource = AutoCompleteSource.ListItems

Je souhaite que la combobox me propose un choix de plus en plus précis, caractère par caractère.
Jusqu'ici tout fonctionne.
Dès que j'appuie sur <tab> (keycode=8) tout fonctionne encore à merveille.

Par contre, quand j'appuie sur <ENTER>, là, la combobox se vide. Ggrr. Tout est perdu. Malgré l'utilisation du keydown. En voici le code :

Private Sub cboLocalite01_KeyDown(sender As Object, e As KeyEventArgs) Handles cboLocalite01.KeyDown
If e.KeyCode = Keys.Return Then
My.Computer.Keyboard.SendKeys("{TAB}")
End If
End Sub

Pouvez-vous m'aider ?
Pouvez-vous me consacrer un peu de votre temps pour m'aider à solutionner ce souci.

Un grand merci par avance.
jyd

11 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
17 sept. 2014 à 12:50
Bonjour,

Il semble qu'il faille utiliser un correctif :
http://support.microsoft.com/kb/2868238/en-us

Puis dans ton code au lieu du "KeyDown", utiliser
    Private Sub cboLocalite01_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboLocalite01.SelectionChangeCommitted
        Console.WriteLine("Combo Text = " & cboLocalite01.Text)
        My.Computer.Keyboard.SendKeys("{TAB}")
     

    End Sub

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 sept. 2014 à 13:06
Bonjour,
pardonnez à l'ignare que je suis en VB.Net.
Pourquoi un inélégant SendKeys et non la modification de la valeur de e.KeyCode ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 sept. 2014 à 14:01
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
17 sept. 2014 à 14:56
Merci à tous pour votre passage sur mon post.

Pour info,
avec ou sans le correctif ms,
la solution de Jordane ne fonctionne pas non plus.
"cboLocalite01_SelectionChangeCommitted" gère bien le <enter>
mais renvoie aussi un combobox vide !

J'ai l'impression qu'il me manque un petit truc dans le code
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
17 sept. 2014 à 14:58
A NHenry,
ton sujet ne m'aide malheureusement pas plus...

A l'aide, svp
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 sept. 2014 à 19:27
Le sujet en question traite du passage au contrôle suivant, je pense que cela t'évitera l'immonde SendKeys.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
17 sept. 2014 à 16:09
Bonjour

as tu essayé
e.Handled = true

0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
17 sept. 2014 à 16:14
Merci Whismeril...
En insérant a ligne de code dans mon "keydown",
cela ne fonctionne pas mieux.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
19 sept. 2014 à 15:06
et dans le keypress?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
Modifié par jordane45 le 19/09/2014 à 17:19
Je viens de tester.. et il semble que les fonctions soient appelées dans cet ordre :

SelectionChangeCommitted
KeyDown
KeyPress

Edit : petite erreur de copier/coller...
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
18 sept. 2014 à 10:18
Cela se complique,
le click souris sur la liste efface aussi le contenu de la combobox.
Pourquoi ?
Comment solutionner ce double souci.
J'ai beau tester des rucs.
Rien n'y fait.
Pourquoi ?

Merci à tout pour votre aide
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
18 sept. 2014 à 10:25
En fait... la combo conserve (en affichage) les données QUE lorsque tu focus un autre éléments

La selection par le click et/ou le "enter" déclenche l'évènement SelectionChangeCommitted ... mais pour éviter que le conetenu ne soit effacé... aucune idée....
J'ai essayé de mon côté et je rencontre les mêmes soucis.

A la limite.. je me demande s'il ne faudrait pas ajouter une textbox cachée ... la remplir au fur et à mesure que tu "tapes" dans la combo... et qu'au moment du changecommitted.. tu prennes son contenu pour le remettre dans la combo..
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
18 sept. 2014 à 10:36
Effectivement, j'y avais pensé.
Mais là non plus...
Je n'y arrive pas.
Je sais plus quoi faire.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
18 sept. 2014 à 14:15
Bonjour,

As tu essayé, comme te le suggère ucfoutu ici : LienAncre :
Private Sub cboLocalite01_KeyDown(sender As Object, e As KeyEventArgs) Handles cboLocalite01.KeyDown
    If e.KeyCode = Keys.Return Then e.KeyCode = Keys.Tab 'ou e.KeyCode = 0 etc...
End Sub 


Désolé également pour cette réponse d'ignare, mais la logique semble correcte...
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
18 sept. 2014 à 14:19
Le souci c'est que je crois que le SelectionChangeCommitted se passe avant le keydown... et donc que la case s'efface avant même de faire un tab..
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
18 sept. 2014 à 19:40
Tu conseilles quoi ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
18 sept. 2014 à 19:42
Ben là comme ça.. je ne sais pas...
Il faudrait que je cherche... mais je n'ai pas trop le temps pour l'instant...
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
18 sept. 2014 à 19:58
Puis-je me permettre de solliciter pour les heures qui viennent.
Un grand merci par avance.
De mon côté je vais persévérer dans l'emploi de textbox suggestives...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
19 sept. 2014 à 08:07
Bonjour,

Je vais surement dire encore une grosse bêtise, mais je n'en suis plus à une près.

Par moment, si le contrôle choisit ne réagit pas comme on le souhaite, c'est tout simplement parce qu'il n'est pas le meilleur outil pour cette action.

Si, dans ton cas, tu souhaites faire une saisie semi-automatique, le contrôle ComboBox n'est peut être pas celui qui convient.
Si c'est bien ce que tu souhaites faire, je te conseillerai d'utiliser un TextBox de saisie couplé à un ListBox d'affichage des valeurs en fonction de la saisie dans le TextBox.
C'est très simple à mettre en place et le résultat devrait te satisfaire...

Ou alors, je n'ai rien compris, et donc veuillez excuser mon intervention et ne pas en tenir compte.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
Modifié par jordane45 le 19/09/2014 à 17:19
Bon.. après quelques rapides tests..
voici quelque chose qui semble fonctionner....

Je te laisse corriger/améliorer si besoin.
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        cboLocalite01.Items.Clear()
        For ll As Integer = 1 To 150
            cboLocalite01.Items.Add(ll)
        Next ll
        cboLocalite01.DropDownStyle = ComboBoxStyle.Simple
        cboLocalite01.AutoCompleteMode = AutoCompleteMode.SuggestAppend
        cboLocalite01.AutoCompleteSource = AutoCompleteSource.ListItems

    End Sub

    Private Sub cboLocalite01_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cboLocalite01.KeyPress
        Console.WriteLine("keypress =>" & e.KeyChar)
        Me.TextBox1.Text = cboLocalite01.Text & e.KeyChar
    End Sub

      Private Sub cboLocalite01_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboLocalite01.SelectionChangeCommitted
        Console.WriteLine("SelectionChangeCommitted")
        If cboLocalite01.Text <> "" Then
            cboLocalite01.Text = Me.TextBox1.Text
        End If

    End Sub

    Private Sub cboLocalite01_KeyDown(sender As Object, e As KeyEventArgs) Handles cboLocalite01.KeyDown
        Console.WriteLine("KeyDown")

        If e.KeyCode = Keys.Return Then

            Console.WriteLine("Enter")
            cboLocalite01.Text = Me.TextBox1.Text
        End If
    End Sub

    Private Sub cboLocalite01_SelectedValueChanged(sender As Object, e As EventArgs) Handles cboLocalite01.SelectedValueChanged
        Console.WriteLine("SelectedValueChanged")
    End Sub

    Private Sub cboLocalite01_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboLocalite01.SelectedIndexChanged
        Console.WriteLine("SelectedIndexChanged")
    End Sub
End Class



NB : Pour fonctionner... il faut ajouter une TEXTBOX (pour moi porte le nom de TextBox1)...



Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
21 sept. 2014 à 18:32
Désolé pour mon inertie. J'ai dû quitter quelques jours ce problème. Jordane45, je te remercie pour ta très large contribution. Mais...
ton code ne fonctionne pas à 100% (ex à l'emploi du backspace...). J'y ai regardé pour finaliser... Je ne trouve pas.
Merci toutefois pour m'avoir avancer dans le code.
Merci
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
21 sept. 2014 à 18:38
ton code ne fonctionne pas à 100% (ex à l'emploi du backspace...).
Comme je te l'ai indiqué dans mon précédent message :"Je te laisse corriger/améliorer si besoin. "

J'y ai regardé pour finaliser... Je ne trouve pas.
Ben il va te falloir chercher.... et/ou changer de composant.
Mais là... il s'agit d'une nouvelle question...;

Pour ce qui est de ta question Initiale
Par contre, quand j'appuie sur <ENTER>, là, la combobox se vide.
Je pense que la réponse t'a été donnée... et donc que le sujet peut être mis en résolu.


Peut-être qu'en utilisant une textbox à la place de la combo tu rencontrerais moins de soucis.
A tester.
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
22 sept. 2014 à 11:29
Effectivement, la combinaison de textboxes (pour la tape intuitive) et de comboxes (pour la recherche par scrolling) m'a permis de solutionner mon souci.
Voici d'ailleurs une url qui va aider de futurs lecteurs :
http://www.codeproject.com/Articles/243368/AutoComplete-Textbox

Merci à tous pour votre collaboration.
0
AmaniDD Messages postés 4 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014
Modifié par AmaniDD le 22/09/2014 à 11:23
OOOOhh! Il correspond bien à mes besoin. Merci pour toutes ces réponses !
--------------------------------------------------------
0
Rejoignez-nous