IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

ContextMenuStrip et DataGridView : Comment savoir la cellule cliquée ?


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut ContextMenuStrip et DataGridView : Comment savoir la cellule cliquée ?
    Bonjour,

    J'ai un DataGridView (DGV) et un ContextMenuStrip (CMS) sur une forme.
    J'arrive à afficher le CMS sur un click-droit sur la DGV avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub dgv_FreqRelais_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv_FreqRelais.MouseDown
            ' On affiche le menu contextuel sur click-droit.
            If e.Button = Windows.Forms.MouseButtons.Right Then
                cms_Relais.Show(dgv_FreqRelais, e.Location)
            End If
        End Sub
    J'ai bien le menu contextuel qui s'affiche à l'endroit du click.

    Mais je voudrais savoir sur quelle cellule l'utilisateur a cliqué pour faire certains tests, et pour passer en paramètre la valeur de la cellule.
    Or je n'arrive pas à récupérer cette information.

    Savez-vous comment on fait ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour récupérer la cellule à partir des coordonnées du clic, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim hti as DataGridView.HitTestInfo = dgv_FreqRelais.HitTest(e.X, e.Y)
        If hti.Type = DataGridViewHitTestType.Cell Then
           Dim row As Integer = hti.RowIndex
           Dim col As Integer = hti.ColumnIndex
           ...
        End If
    Par contre tu n'auras pas accès à ça à partir du menu, donc il faut que tu stockes l'info quelque part avant d'ouvrir le menu. Par exemple tu pourrais stocker le HitTestInfo dans le Tag du menu, de façon à pouvoir le récupérer plus tard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub dgv_FreqRelais_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv_FreqRelais.MouseDown
            ' On affiche le menu contextuel sur click-droit.
            If e.Button = Windows.Forms.MouseButtons.Right Then
                cms_Relais.Tag = dgv_FreqRelais.HitTest(e.X, e.Y)
                cms_Relais.Show(dgv_FreqRelais, e.Location)
            End If
        End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    Excellent

    Voilà ce que ça donne sur mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub dgv_FreqRelais_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv_FreqRelais.MouseDown
            ' On teste si c'est un click-droit
            If e.Button = Windows.Forms.MouseButtons.Right Then
                ' On récupère les coordonnées X,Y du click
                cms_Relais.Tag = dgv_FreqRelais.HitTest(e.X, e.Y)
                ' On va voir à quoi ce click correspond sur le DGV
                Dim hti As DataGridView.HitTestInfo = dgv_FreqRelais.HitTest(e.X, e.Y)
                ' Est-ce que le click a été fait sur une cellule ?
                If hti.Type = DataGridViewHitTestType.Cell Then
                    ' On récupère le numéro de ligne et de colonne de la cellule.
                    Dim row As Integer = hti.RowIndex
                    Dim col As Integer = hti.ColumnIndex
                    [ On peut alors faire les tests qu'on veut sur la cellule ]
                End If
     
                cms_Relais.Show(dgv_FreqRelais, e.Location)
            End If
        End Sub
    Merci beaucoup pour cette réponse rapide et claire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/05/2012, 03h11
  2. Comment savoir si cellule vide DataGridView ?
    Par savoir dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/01/2011, 16h40
  3. [JSpinner] Comment savoir le bouton cliqué
    Par julie4207 dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2008, 15h10
  4. [2.0 DataGridView] comment sélectionner une cellule par le code
    Par juniorAl dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/07/2008, 19h46
  5. [Excel] Comment savoir si la cellule contient un lien hypertexte ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 16/12/2004, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo