none
(Visual Studio 2008) Intercepter la touche "SUPPR" dans une DataGridView RRS feed

  • Question

  • 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 ?


    Cordialement SC

    jeudi 20 juin 2013 16:41

Réponses

  • Bonjour,

    La solution a été donnée dans le forum VBFRANCE

    ************************************************

    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
    

     

    Cordialement SC

    samedi 22 juin 2013 05:27