Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre actif
    Inscrit en
    juin 2006
    Messages
    595
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 595
    Points : 163
    Points
    163

    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

  2. #2
    Membre confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    107
    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 : 107
    Points : 227
    Points
    227

    Par défaut

    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)

  3. #3
    Membre actif
    Inscrit en
    juin 2006
    Messages
    595
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 595
    Points : 163
    Points
    163

    Par défaut

    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 ?

  4. #4
    Membre confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    107
    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 : 107
    Points : 227
    Points
    227

    Par défaut

    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.
    }

  5. #5
    Membre actif
    Inscrit en
    juin 2006
    Messages
    595
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 595
    Points : 163
    Points
    163

    Par défaut

    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

  6. #6
    Membre actif
    Inscrit en
    juin 2006
    Messages
    595
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 595
    Points : 163
    Points
    163

    Par défaut

    Ok j'ai ajouté un handler pour l’évènement Click du SousMenu

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •