(Visual Studio 2008) Intercepter la touche SUPPR dans une DataGridView
scn68100
Messages postés153Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention26 décembre 2019
-
21 juin 2013 à 07:50
scn68100
Messages postés153Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention26 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
A voir également:
(Visual Studio 2008) Intercepter la touche SUPPR dans une DataGridView
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 20149 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
scn68100
Messages postés153Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention26 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