Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Débuter
Débuter Forum d'entraide pour bien débuter avec Dotnet
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/12/2012, 17h53   #1
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 557
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 557
Points : 145
Points : 145
Par défaut Questions sur le contextMenuStrip(sous menus)

Bonjour,

J'ai un menu ContextMenuStrip qui s"affiche lorsque l'utilisateur fais un clic droit sur une cellule du datagridview.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
Public Class Form1
    Dim dt As DataTable
 
    Dim int_col_exp As Integer '//Index de la colonne expédition
    Dim int_col_dest As Integer '//Index de la colonne destination
    Dim int_ligne_dest As Integer
 
    Private Sub frmDataGrid_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        FillDataInGrids()
        data_grid_carnet.CurrentCell = data_grid_carnet.Item(1, 0)
    End Sub
 
    Private Sub FillDataInGrids()
        dt = New DataTable
 
        'Titre des colonnes du datagrid1
        dt.Columns.Add("Name", Type.GetType("System.String"))
        dt.Columns.Add("Designation", Type.GetType("System.String"))
        dt.Columns.Add("Department", Type.GetType("System.String"))
        dt.Columns.Add("Salary", Type.GetType("System.String"))
 
        'Ligne enregistrement
        Dim Dr As DataRow
        'les enregistrement du datagrid1
        Dr = dt.NewRow
        Dr("Name") = "Tom"
        Dr("Designation") = "Developer"
        Dr("Department") = "Engg"
        Dr("Salary") = "1000"
        dt.Rows.Add(Dr)
 
        Dr = dt.NewRow
        Dr("Name") = "Jerry"
        Dr("Designation") = "Developer"
        Dr("Department") = "Engg"
        Dr("Salary") = "1000"
        dt.Rows.Add(Dr)
 
        Dr = dt.NewRow
        Dr("Name") = "Micky"
        Dr("Designation") = "Analyst"
        Dr("Department") = "Engg"
        Dr("Salary") = "2000"
        dt.Rows.Add(Dr)
 
        Dr = dt.NewRow
        dt.Rows.Add(Dr)
 
        Dr = dt.NewRow
        dt.Rows.Add(Dr)
 
        Dr = dt.NewRow
        dt.Rows.Add(Dr)
 
        Dr = dt.NewRow
        dt.Rows.Add(Dr)
 
        'Now Bind the DataGrids to these table
        data_grid_carnet.DataSource = dt
 
        Dim _contextmenu As New ContextMenuStrip
        _contextmenu.Items.Add("Menu1")
        _contextmenu.Items.Add("Menu2")
        _contextmenu.Items.Add("Menu3")
        AddHandler _contextmenu.ItemClicked, AddressOf contextmenu_click
        For Each rw As DataGridViewRow In data_grid_carnet.Rows
            For Each c As DataGridViewCell In rw.Cells
                c.ContextMenuStrip = _contextmenu
            Next
        Next
 
    End Sub
 
    Private Sub contextmenu_click(ByVal sender As System.Object, _
                                  ByVal e As ToolStripItemClickedEventArgs)
        Dim clickCell As DataGridViewCell = data_grid_carnet.SelectedCells(0)
        data_grid_carnet.Rows(Me.data_grid_carnet.CurrentCell.RowIndex).Selected = True
        Select Case e.ClickedItem.Text
            Case "Menu1"
                MsgBox("Menu1")
            Case "Menu2"
                MsgBox("Menu2")
            Case "Menu3"
                MsgBox("Menu3")
        End Select
        MsgBox(Me.data_grid_carnet.CurrentCell.RowIndex)
    End Sub
    Private Sub data_grid_carnet_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles data_grid_carnet.CellMouseDown
        If e.Button = Windows.Forms.MouseButtons.Right Then
            If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then
                data_grid_carnet.CurrentCell = data_grid_carnet.Rows(e.RowIndex).Cells(e.ColumnIndex)
            End If
        End If
    End Sub
End Class
J'aimerais ajouter des sous menus a mon ContextMenuStrip mais je ne vois pas comment faire car je ne passe pas par le contrôle graphique.

exemple:
Menu1
Menu2
Sousmenu1
Sousmenu2
Menu3

J'aimerais aussi savoir si la façon dont je procède pour afficher un menu sur un Datagridview est correct ou existe-t-il d autre solution ??

Auriez vous de la doc ou des exemples ?

D'avance merci
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 20h24   #2
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
Détails du profil
Informations personnelles :
Nom : Homme François DORIN
Localisation : France, Vienne (Poitou Charente)

Informations professionnelles :
Activité : Chef de Projet
Secteur : Associations - ONG

Informations forums :
Inscription : décembre 2012
Messages : 104
Points : 226
Points : 226
Bonsoir,

Pour afficher le menu, il existe une autre solution : l'événement OnCellContextMenuStripNeeded au niveau du DataGridView

http://msdn.microsoft.com/fr-fr/libr...vs.100%29.aspx

Concernant le problème du sous-menu, je pense qu'il faut regarder au niveau des surcharges disponibles pour la méthode Add de ContextMenuStrip.Items et ajouter directement un MenuItem au lieu d'une chaine de caractère (ce n'est qu'une piste : à confirmer)
ElTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 12h06   #3
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 557
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 557
Points : 145
Points : 145
Merci de ton aide.

J'ai regardé au niveau pour la méthode Add de ContextMenuStrip.Items et je ne vois rien qui pourrait me faire un sous menu.

Pour l'évènement OnCellContextMenuStripNeeded aurais tu un exemple ?
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 18h56   #4
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
Détails du profil
Informations personnelles :
Nom : Homme François DORIN
Localisation : France, Vienne (Poitou Charente)

Informations professionnelles :
Activité : Chef de Projet
Secteur : Associations - ONG

Informations forums :
Inscription : décembre 2012
Messages : 104
Points : 226
Points : 226
Bonsoir,

Concernant le sous-menu, je viens de regarder un petit peu comment il fallait faire. Si tu as un menu "Items" qui doit être constitué des sous-éléments "Item 1" et "Item 2" par exemple, alors, il faut :
1) créer un ToolStripMenuItem "Items"
2) créer un ToolStripMenuItem "Item 1"
3) créer un ToolStripMenuItem "Item 2"
4) Ajouter "Item 1" et "Item 2" à Items. Pour cela, il faut aller voir du coté de la propriétés DropDownItems et y ajouter les éléments, soit un par un via la méthode Add, soit ensemble en les regroupant dans une collection via la méthode AddRange
5) Ajouter "Items" à ton menu contextuel (menuContext.Items.Add)

Pour l'exemple du menu contextuel via OnCellContextMenuStripNeeded :
Code :
1
2
3
4
5
6
7
8
9
10
 
public void OnCellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
   e.ContextMenuStrip = monMenuContextuel;
 
   // Bien entendu, le code est personnalisable à volonté. Par exemple, il est 
   // très aisé de choisir le menu contextuel à afficher en fonction de la 
   // colonne, puisque e.ColumnIndex contient l'index de la colonne sur 
   // laquelle a eu lieu le clic droit.
}
ElTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 09h25   #5
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 557
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 557
Points : 145
Points : 145
Super un grand merci.

Mais je n'arrive pas à intercepter les clicks de mes sous menu alors que des mes menu1, menu2, menu3 ça fonctionne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
Dim _contextmenu As New ContextMenuStrip
        Dim menu1 As New ToolStripMenuItem
        Dim menu2 As New ToolStripMenuItem
        Dim menu3 As New ToolStripMenuItem
        Dim smenu1 As New ToolStripMenuItem
        Dim smenu2 As New ToolStripMenuItem
        Dim smenu3 As New ToolStripMenuItem
        menu1.Text = "Menu1"
        menu2.Text = "Menu2"
        menu3.Text = "Menu3"
        smenu1.Text = "Sous Menu1"
        smenu2.Text = "Sous Menu2"
        smenu3.Text = "Sous Menu3"
 
        menu1.DropDownItems.Add(smenu1)
        menu1.DropDownItems.Add(smenu2)
        menu1.DropDownItems.Add(smenu3)
 
        _contextmenu.Items.Add(menu1)
        _contextmenu.Items.Add(menu2)
        _contextmenu.Items.Add(menu3)
 
        AddHandler _contextmenu.ItemClicked, AddressOf contextmenu_click
        For Each rw As DataGridViewRow In data_grid_carnet.Rows
            For Each c As DataGridViewCell In rw.Cells
                c.ContextMenuStrip = _contextmenu
            Next
        Next
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Private Sub contextmenu_click(ByVal sender As System.Object, _
                                  ByVal e As ToolStripItemClickedEventArgs)
        Dim clickCell As DataGridViewCell = data_grid_carnet.SelectedCells(0)
        data_grid_carnet.Rows(Me.data_grid_carnet.CurrentCell.RowIndex).Selected = True
 
 
        Select Case e.ClickedItem.Text
            Case "Menu1"
                MsgBox("Menu1")
            Case "Menu2"
                MsgBox("Menu2")
            Case "Menu3"
                MsgBox("Menu3")
            Case "Sous Menu1"
                MsgBox("smenu1")
            Case "Sous Menu2"
                MsgBox("Sous menu2")
            Case "Sous Menu3"
                MsgBox("Sous menu3")
        End Select
        MsgBox(Me.data_grid_carnet.CurrentCell.RowIndex)
    End Sub
Bàt
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 14h33   #6
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 557
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 557
Points : 145
Points : 145
Ok j'ai ajouté un handler pour l’évènement Click du SousMenu
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h51.


 
 
 
 
Partenaires

Hébergement Web