Je travaille sur VS 2010 avec VB à l'aide de .NET Framework 4.0
J'ai un Si je clique sur la flèche déroulante sur le Si je clique dans la zone de texte du Si je clique sur la flèche déroulante du existe un événement différent causé par le devrait J'utilise quelque chose en dehors de Y a-t-il un autre événement que je devrais rechercher? P> Fondamentalement, le type de chaque liste est "## - Quelque texte". P> p> Combobox code>. Il y a des objets et les affichent bien. Voici là où il obtient un peu bizarre: p>
comboBox code> et cliquez sur l'élément que je veux,
sélectionnéexchanged code> est appelé - bon. p>
Combobox code> et commencez à taper ce que je veux sélectionné et fini en appuyant sur la touche UP (ou Bas),
SélectionnéExchangeed code> est appelé - aussi bon. P>
Combobox code> et commencez à taper ce que je veux sélectionner et terminez-le en appuyant sur Entrée ,
sélectionnéeExchanged code> n'est pas appelé - problème. p>
Entrée code> dans le dernier cas? J'ai essayé d'utiliser le
textchanged code> et
textupdate code> événements, mais ceux-ci ne semblent pas fonctionner: p>
e.equals (Keys.equals) code>? P>
Combobox code> sont: p>
---> Ceci est le type le plus courant code> li>
---> Il y en a quelques-uns avec '/' code> li>
---> il y en a quelques-uns avec '(' et ')' code> li>
ul>
9 Réponses :
S'abonner à l'événement Keauprimé:
Private Sub yourComboBox_KeyPressed(sender As System.Object, e As System.KeyPressedEventArgs) Handles yourComboBox.KeyPressed If e.KeyChar.Equals((char)Keys.Enter) Then Call SomeMethod() End If
Cela aidera vos problèmes
C'est un peu plus proche; L'événement code> code> est appelé, mais cela ne modifie pas réellement l'index du Combobox code>.
En fait, ce dont vous avez besoin, s'il vous plaît dites-moi les détails ..... Dans le code ci-dessus, si vous appuyez sur la touche Entrée de l'index particulier du ComboBox, vous pouvez effectuer des fonctions à l'intérieur de l'événement clé.
Disclaimer: Ceci est écrit en C # - laissez-moi savoir si vous en avez besoin si vous en avez besoin traduit en vb. intéressant, le DOCS Dites que nous devrions utiliser l'événement EDIT: strong> P> à Empêchez l'utilisateur de devoir taper la chaîne entière, utilisez l'avis de la réponse de l'ADI: accédez aux propriétés de la liste déroulante et de réglage SET SET SELECTIONCHANGECOMMITATED CODE> au lieu de la < Code> sélectionnéeExchanged code> événement lors de la manipulation des modifications de sélection effectuées par l'utilisateur. Il est nécessaire de le faire dans ce cas que l'événement code> SELECTEXCHANDDEXCHANGED SELECTEXCHANGED aise deux fois à l'aide de mon approche. P>
autocompletemode code> sur
suggestionAppend code> et
et
et
Autocompéquation Source Code> à
Listitems Code> - J'utilise ces paramètres lors de la création de ma réponse, il devrait donc fonctionner pour vous. P> P>
J'apprécie cela, mais je ne veux pas que l'utilisateur ait à taper la chaîne entière dans la liste déroulante pour trouver une correspondance (certaines des chaînes ont plus de 20 caractères) Ce n'est pas ce dont j'ai besoin. Grand extrait cependant. Merci!
Gaaaah, il se ferme réellement. Ok, cela fait reconnaître qu'il y a un changement d'index. Cependant, peu importe ce que je tape (quel que soit l'indice que je souhaite d'aller à), sur Entrer, il est défini sur le premier élément de la liste.
Il semble que c'est bon sur le texte, mais quand il devient 1 code> ... Ça ne trouve pas l'index de la chaîne ...
@redhotspike Pourriez-vous mettre à jour votre question avec les articles réellement contenus dans la combinaison? Assurez-vous également que Combobox1 est le nom correct de votre code.
J'ai édité ma question pour inclure un échantillon d'éléments Combobox.
Private Sub ComboBox1_KeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp If e.KeyCode = Keys.Enter Then MessageBox.Show(ComboBox1.SelectedText) Call SomeMethod() End If End Sub
Cela fonctionnerait bien en conjonction avec ce que @adikonstantin suggère, mais le texte est édité lorsque l'utilisateur appuie sur ENTER après une correspondance. Avez-vous des suggestions pour cela?
Pouvez-vous me faire savoir si cela fonctionne pour vous?
Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress If e.KeyChar = Chr(13) Then ComboBox1_SelectedIndexChanged(sender, e) End If End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged MsgBox(ComboBox1.Text) 'Your code here End Sub
merci mais il a eu le même résultat que la suggestion de @sean Vaughn
Je crois que vous devriez définir J'ai préparé Quelque chose pour vous indiquer cela. p>
Cordialement, P>
adi konstantin p> autocompletémode code> sur
suggestippend code> strong> et
autocompéquade code> à
listitems code> strong>. De cette façon, si ce que vous tapez est durable avec les éléments chargés sur ComboBox, en l'écrivant et en trouvant cet élément, lorsque vous appuyez sur Entrée kbd>, le
sélectionnéExchanged code> sera déclenché (Même si un match ne serait pas trouvé - le premier de la liste sera sélectionné) p>
Ceci est définitivement plus proche de ce dont j'ai besoin - sauf lorsque une correspondance est trouvée et que l'utilisateur clique sur Entrée, le texte dans le comboBox code> est effacé ... Toute suggestion?
Option Strict On Public Class Form1 Friend WithEvents ComboBox1 As New ComboBox With {.Parent = Me} Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load ComboBox1.Items.AddRange({"hello", "tes1ted", "word", "item", "tes2ted"}) ComboBox1.Text = ComboBox1.Items(0).ToString End Sub Private Sub ComboBox1_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) Handles ComboBox1.KeyUp 'You can put this in the keydown event, or adapt it a small bit and put it in the keypress event 'putting it in the textchanged event is problematic and not recommended. Dim OriginalText As String = ComboBox1.Text If e.KeyCode = Keys.Enter Then If ComboBox1.SelectionLength > 0 Then ComboBox1.Text = ComboBox1.Text ComboBox1.SelectionLength = 0 ComboBox1.SelectionStart = ComboBox1.Text.Length End If End If If Not IsTextKey(e.KeyCode) Then Exit Sub Dim Filter As String = ComboBox1.Text & "*" If Filter.Length = 1 Then Exit Sub For I = 0 To ComboBox1.Items.Count - 1 If LCase(ComboBox1.Items(I).ToString) Like LCase(Filter) Then ComboBox1.SelectedItem = ComboBox1.Items(I) ComboBox1.Select(OriginalText.Length, (ComboBox1.Text.Length - OriginalText.Length)) Exit Sub End If Next End Sub Function IsTextKey(ByVal Key As Integer) As Boolean Select Case True Case Key = Keys.Up : Return False Case Key = Keys.Down : Return False Case Key = Keys.Left : Return False Case Key = Keys.Right : Return False Case Key = Keys.Back : Return False Case Key = Keys.Delete : Return False Case Key = Keys.LWin : Return False Case Key = Keys.RWin : Return False 'add whatever I missed 'return false if the key either removes text from the textbox 'or does not produce a character Case Else 'return true if the key produces a visible character(including space) Return True End Select End Function End Class
C'est génial! Wow. C'est surtout fonctionne. Le seul problème qu'il a est de savoir s'il ya un / code> dans la chaîne - il modifie l'index, mais la chaîne ne se renseie pas dans le
comboBox code>.
lol donc fait i> travaille ... mais seulement si je tape vraiment rapide et appuyez sur Entrez code> vraiment rapidement. Il essaie de filtrer après chaque clé, ce qui n'est pas recherché.
Alors changez quel événement vous faites votre filtrage et modifiez-le à vos besoins.
Vous pouvez supprimer la partie qui met en évidence la pièce "supposée" et le faire où il sélectionne juste le premier match fidèlement, de sorte que vous n'aurez pas à appuyer sur Entrée, mais cela résoudra "Test1" lorsque vous êtes à Taper "test", même si vous alliez taper "Test2" ... Je pense que cela devrait résoudre votre problème
Fermez la liste manuellement sur l'événement de la prévisualisation:
Private Sub cmbStatus_PreviewKeyDown(sender As ComboBox, e As PreviewKeyDownEventArgs) Handles cmbStatus.PreviewKeyDown If e.KeyCode = Keys.Enter Then sender.DroppedDown = False End Sub
J'ai eu un problème similaire lorsque le ComboBox Dropdownstyle a été défini sur Simple avec Autocomplète défini pour ajouter, Sourcing de mes Listitems. Ma solution de contournement était d'avoir une variable de chaîne Save the ComboBox Text sur chaque événement textchanged. De cette façon, lorsque l'entrée est enfoncée, vous pouvez récupérer le texte supprimé et le réaffecter au texte ComboBox.
'' Déclaration globale p> Il y a de bonnes réponses ci-dessus, Mais j'ai aimé que je n'ai pas besoin de régler toutes les clés de commande et les flèches, etc. P> p>
Le problème est que la sélection sélectionnée ne soit pas appelée lorsque la valeur est saisie et modifie l'index sélectionné. POURQUOI?