Salut à tous,
Voilà j'aimerais un menu au click droit sur un HeaderColumn d'un Datagridview...
Quelqu'un pourrait il m'aider car la je me demande si cela est possible surtout sur les headers seulement
Merci d'avance de vos réponse,
Echyzen
Version imprimable
Salut à tous,
Voilà j'aimerais un menu au click droit sur un HeaderColumn d'un Datagridview...
Quelqu'un pourrait il m'aider car la je me demande si cela est possible surtout sur les headers seulement
Merci d'avance de vos réponse,
Echyzen
DataGridView.ColumnHeaderMouseClick Event
Avec l'event e (e As DataGridViewCellMouseEventArgs) tu peux tester si c'est clic droit ou gauche avec e.Buttons, et si c'est clic droit, tu affiches ton menu.
Ah ouais tu gères... J'avais pas penser a çà je vais tester et te dis quoi.
Mais normalement c'est bon :D
Ouch, mes chevilles ... :aie:
XD
J'ai un léger soucis, je veux en faite faire au click droit le menu sa c'est bon mais je propose "Supprimer" et je voudrais que cela supprime la Column sur lequel le HeaderColumn a eu lieu... Et la sa coince je ne sais pas comment récupérer le CurrentColumn
Le sender de ton event n'est pas ta "currentColumn" ?
Voila le code :
La après avoir cliqué j'ai une fonction pour gerer le supprimer mais du coup je perds ma column tu comprends?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Public Sub DGV_ColumnHeaderMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DGV.ColumnHeaderMouseClick If e.Button = MouseButtons.Right Then 'Affiche ContextmenuStrip fonctionnel DGV.ContextMenuStrip = ContextMenuStrip1 ContextMenuStrip1.Show(Me, New Point(e.X + 50, e.Y)) End If End Sub Private Sub SupprimerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprimerToolStripMenuItem.Click NbColumn = NbColumn - 1 'DGV.Columns.Remove() End Sub
Bah je sais bien mais moi c'est justement d'arriver a le transmettre dans l'autre partie le problème XD
Et en stockant ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Dim columnIndexToDelete As Integer Public Sub DGV_ColumnHeaderMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DGV.ColumnHeaderMouseClick If e.Button = MouseButtons.Right Then 'Affiche ContextmenuStrip fonctionnel DGV.ContextMenuStrip = ContextMenuStrip1 ContextMenuStrip1.Show(Me, New Point(e.X + 50, e.Y)) columnIndexToDelete = e.ColumnIndex End If End Sub Private Sub SupprimerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprimerToolStripMenuItem.Click NbColumn = NbColumn - 1 DGV.Columns(columnIndexToDelete).Remove() End Sub
Yep comme ceci cela marche mais bon sa m’embête d'avoir une autre variable global a se traîner. Sa fait pas très propre niveau code...
Après, s'il y a pas mieux tan pis...
Tu peux faire ton propre ContextMenuStrip et y ajouter une property IndexColumnDelete, elle sera stocké dans ton Control.
Tu peux aussi faire ton gestionnaire d'event pour raise un event qui t'es propre avec les paramètres que tu souhaites.
Il doit y avoir une solution autre que ces 2 là, ou par une variable globale, mais elle ne me saute pas aux yeux pour le moment.
Outre les solutions proposé par _Ez3kiel, tu peux créer une propriété sur ta Form qui stocke le numéro de ligne du DGV cliqué. (pourra servir pour différent traitement de ligne du DGV).
Une propriété sert à stocker les données interne d'un objet. (en l'occurence pour ta Form) Ainsi cela correspond à l'esprit objet.
Dans ton cas ce sera d'une propriété privé. (correspond au dim dans la Form)
Je privilégie la solution de rv26t, c'est plus propre, et moins lourd. :ccool: