COMBOBOX - Supprimer une entrée en pressant "DEL" lorsque le dropdown est ouvert [Résolu]

Signaler
Messages postés
7
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
4 novembre 2012
-
Messages postés
7
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
4 novembre 2012
-
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 !

5 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Salut,

Une petite inversion de lignes et hop
Dim item = cb_Folders.SelectedItem
cb_Folders.DroppedDown = False
cb_Folders.Items.Remove(item)
cb_Folders.DroppedDown = True


Sinon, j'ai trouvé cet article sur CodeProject : [url=http://www.codeproject.com/Articles/14255/ComboBox-firing-events-when-hovering-on-the-dropdo]http://www.codeproject.com/Articles/14255/ComboBox-firing-events-when-hovering-on-the-dropdourl] qui peut t'intéresser

_____________
Kenji
Messages postés
7
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
4 novembre 2012

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... ?
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Pour le moment, j'ai rien trouvé

_____________
Kenji
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
7
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
4 novembre 2012

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)