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

jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 17 sept. 2014 à 11:24 - Dernière réponse : jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention
- 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

25 réponses

jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 17 sept. 2014 à 12:50
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 17 sept. 2014 à 13:06
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
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 17 sept. 2014 à 14:01
Commenter la réponse de NHenry
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 17 sept. 2014 à 14:56
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
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 17 sept. 2014 à 14:58
0
Merci
A NHenry,
ton sujet ne m'aide malheureusement pas plus...

A l'aide, svp
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 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.
Commenter la réponse de jytest
Whismeril 12106 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 17 sept. 2014 à 16:09
0
Merci
Bonjour

as tu essayé
e.Handled = true

Commenter la réponse de Whismeril
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 17 sept. 2014 à 16:14
0
Merci
Merci Whismeril...
En insérant a ligne de code dans mon "keydown",
cela ne fonctionne pas mieux.
Whismeril 12106 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 19 sept. 2014 à 15:06
et dans le keypress?
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 19 sept. 2014 à 15:41
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
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 18 sept. 2014 à 10:18
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 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 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..
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 18 sept. 2014 à 10:36
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
pijaku 12204 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 18 sept. 2014 à 14:15
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 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 18 sept. 2014 à 19:40
Tu conseilles quoi ?
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 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...
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 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...
pijaku 12204 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 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.
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 21 sept. 2014 à 18:34
ET bien, pas si facile apparemment, vu que je bloque sur ce concept (cfr message ci-dessus)
Commenter la réponse de pijaku
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - Modifié par jordane45 le 19/09/2014 à 17:19
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 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 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
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 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.
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 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.
Commenter la réponse de jordane45
AmaniDD 4 Messages postés jeudi 11 septembre 2014Date d'inscription 22 septembre 2014 Dernière intervention - Modifié par AmaniDD le 22/09/2014 à 11:23
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.