Empêcher le <enter> dans une combobox. [Résolu]

Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
- - Dernière réponse : jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
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
Afficher la suite 

Votre réponse

11 réponses

Messages postés
23618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
0
Merci
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

Commenter la réponse de jordane45
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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 ?
Commenter la réponse de ucfoutu
Messages postés
14323
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
Commenter la réponse de NHenry
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
0
Merci
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
Commenter la réponse de jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
0
Merci
A NHenry,
ton sujet ne m'aide malheureusement pas plus...

A l'aide, svp
NHenry
Messages postés
14323
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Le sujet en question traite du passage au contrôle suivant, je pense que cela t'évitera l'immonde SendKeys.
Commenter la réponse de jytest
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
0
Merci
Bonjour

as tu essayé
e.Handled = true

Commenter la réponse de Whismeril
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
0
Merci
Merci Whismeril...
En insérant a ligne de code dans mon "keydown",
cela ne fonctionne pas mieux.
Whismeril
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
-
et dans le keypress?
jordane45
Messages postés
23618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
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...
Commenter la réponse de jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
0
Merci
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
jordane45
Messages postés
23618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
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..
jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
-
Effectivement, j'y avais pensé.
Mais là non plus...
Je n'y arrive pas.
Je sais plus quoi faire.
Commenter la réponse de jytest
Messages postés
12246
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
0
Merci
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...
jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
-
Tu conseilles quoi ?
jordane45
Messages postés
23618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Ben là comme ça.. je ne sais pas...
Il faudrait que je cherche... mais je n'ai pas trop le temps pour l'instant...
jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
-
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...
pijaku
Messages postés
12246
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
-
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.
jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
-
ET bien, pas si facile apparemment, vu que je bloque sur ce concept (cfr message ci-dessus)
Commenter la réponse de pijaku
Messages postés
23618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
0
Merci
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
jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
-
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
jordane45
Messages postés
23618
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
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.
jytest
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
-
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.
Commenter la réponse de jordane45
Messages postés
4
Date d'inscription
jeudi 11 septembre 2014
Dernière intervention
22 septembre 2014
0
Merci
OOOOhh! Il correspond bien à mes besoin. Merci pour toutes ces réponses !
--------------------------------------------------------
Commenter la réponse de AmaniDD

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.