Moktezuma
Messages postés7Date d'inscriptionlundi 5 mai 2008StatutMembreDernière intervention 4 novembre 2012
-
30 oct. 2012 à 21:06
Moktezuma
Messages postés7Date d'inscriptionlundi 5 mai 2008StatutMembreDernière intervention 4 novembre 2012
-
4 nov. 2012 à 12:37
Bonjour,
Je souhaite pouvoir supprimer un élément d'un ComboBox configuré en "DropDown" en tapant la touche "DEL" lorsque le DropDown est affiché et que la souris est sur un élément.
J'utilise ce code, qui fonctionne bien, sauf qu'il me produit une exception de type "ArugmentOutOfRangeException" lors de l'effacement du dernier élément: je l'ai encadré dans un Try/Catch pour que ce ne soit pas fatal (ok c'est sale, mais le dernier élément est quand même effacé...)
Mais le gros souci, c'est qu'une fois le dernier élément effacé (et donc l'exception capturée) si l'on tente d'ouvrir a nouveau le drop down, il y a une nouvelle exception qui est générée, et qui elle n'est pas capturée !
"Aucune Source disponible" qu'il me dit, et ne me relit a aucune partie de mon code !
Private Sub cb_Folders_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles cb_Folders.KeyDown
If cb_Folders.DroppedDown = False Then Exit Sub
If e.KeyData = 46 Then
Try
If cb_Folders.SelectedIndex = -1 Then Exit Sub
cb_Folders.Items.Remove(cb_Folders.SelectedItem)
cb_Folders.DroppedDown = False
cb_Folders.DroppedDown = True
Catch ex As Exception
End Try
End If
End Sub
- A noter que je "switch" le "DroppedDown" ensuite car sinon le dropdown affiche une ligne blanche a la place de l'élément supprimé au lieu de simplement le réduire d'une ligne. Le False puis True permet de réafficher la liste avec une ligne de moins (chose qu'un refresh ou update ne fait pas).
- A noter également que si jamais, après avoir tout effacé, on tape ne serait-ce qu'un seul caractère sur le controle, on peut ensuite ouvrir le dropdown sans générer d'erreur fatale... Juste que le dropdown contient autant de ligne blanche qu'il y avait d'élément à la base, problème qui n'apparait pas si on supprimer 2 lignes sur 3, par exemple.
- A noter enfin que c'est le seul Handles sur ce controle.
Bref, je sèche complet : alors si vous m'avez compris (déjà: bravo!) et si vous avez un moyen moins "sale" de répondre à mon besoin, ou si vous savez simplement où est mon erreur : Je suis Preneur !!
D'avance Merci !
A voir également:
COMBOBOX - Supprimer une entrée en pressant "DEL" lorsque le dropdown est ouvert
Moktezuma
Messages postés7Date d'inscriptionlundi 5 mai 2008StatutMembreDernière intervention 4 novembre 2012 30 oct. 2012 à 21:51
La vache, c'était si simple?
Merci Beacoup !
Une fois tous les éléments effacés, si on tente d'ouvrir à nouveau le dropdown, il continue d'afficher autant de lignes vides qu'il y avait d'éléments à la base.
Bon, pas très grave : au moins, y'a plus du tout d'exception. Mon try/catch n'a plus lieu d'être.
M'enfin cela dit du coup, pas moyen de garder le dropdown ouvert... ?
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 4 nov. 2012 à 11:16
Salut
et comme ça
Private Sub ComboBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp
Try
If e.KeyData = Keys.Delete Then
DirectCast(sender, ComboBox).Items.Remove(DirectCast(sender, ComboBox).SelectedItem)
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Moktezuma
Messages postés7Date d'inscriptionlundi 5 mai 2008StatutMembreDernière intervention 4 novembre 2012 4 nov. 2012 à 12:37
Salut,
Tiens, je ne connais pas ce DirectCast...
M'enfin, ca ne régle pas le problème. La liste de 3 lignes/3 éléments se retrouve a 3 lignes/2 éléments (toujours la ligne vide) et une excéption non capturée est levée. (ArguementOutOfRangeException, et Aucune Source Disponible comme expliqué plus haut)