(Visual Studio 2008) Intercepter la touche SUPPR dans une DataGridView

scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 décembre 2019 - 21 juin 2013 à 07:50
scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 décembre 2019 - 21 juin 2013 à 18:10
Bonjour,

J'ai dans une DataGridView une colonne qui sert à saisir une quantité

J'ai la propriété EditMode à EditOnEnter

Dans le code, j'intercepte l'événement KeyDown de la DataGrid

Quand je sélectionne une cellule autre que celle de la colonne qui sert à la saisie, l'événement KeyDown est bien intercepté. Par exemple quand je presse la touche "SUPPR"

Mais quand je suis dans la cellule de saisie, je n'intercepte pas cet événement !

Donc je n'intercepte pas la touche "SUPPR"

Quand je saisie une quantité, j'affiche dans une cellule le résultat d'un calcul

Quand je modifie une quantité, idem

Quand il y a un "Retour Arrière" sur une quantité, si l'utilisateur veux l'effacer, je détecte cet événement, et je mets 0 à la place, et corrige l'affichage

Mais quand il sélectionne une saisie et qu'il l'efface par la touche "SUPPR", comme je ne détecte pas l'évènement, je ne peux corriger l'affichage !

Comment remédier à ce problème ?

C'est-à-dire comment détecter la touche "SUPPR" dans la cellule en saisie quand EditMode = EditOnEnter
Cordialement
SC

2 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
21 juin 2013 à 14:47
Bonjour,

Votre problème est du au fait que pour éditer une valeur, la grille affiche un contrôle spécifique à l'emplacement de la cellule à modifier.

C'est donc le KeyDown de ce contrôle qu'il faut capter.

Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
        Dim grid As DataGridView = CType(sender, DataGridView)
        If TypeOf grid.EditingControl Is DataGridViewTextBoxEditingControl Then
            Dim cnt As DataGridViewTextBoxEditingControl = CType(grid.EditingControl, DataGridViewTextBoxEditingControl)
            RemoveHandler cnt.KeyDown, AddressOf EditControlKeyPress
            AddHandler cnt.KeyDown, AddressOf EditControlKeyPress
        End If
End Sub

Private Sub EditControlKeyPress(ByVal sender As Object, ByVal e As KeyEventArgs)
        If (e.KeyCode = Keys.Delete) Then
            MessageBox.Show("SUPPR")
        End If
End Sub
0
scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 décembre 2019
21 juin 2013 à 18:10
Bonsoir,
Merveilleux, ça marche !
J'aurai du trouver cela tout seul, puisque je passe par la même logique pour tester une saisie numérique
Je m'innocente en accusant MSDN et le manque d'exemple ...
Merci beaucoup
SC
0
Rejoignez-nous