none
Questions sur le contextMenuStrip(sous menus) RRS feed

  • Question

  • Bonjour,

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

    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

    lundi 10 décembre 2012 16:47

Réponses

Toutes les réponses

  • Bonjour,

    Votre méthode n'est pas forcement la bonne, j'aurais utilisé directement le contrôle et utiliser object "e" de l’évènement.

    Voici un exemple pour ajouter des subMenu

            Dim oMenu2 As New ToolStripMenuItem With {.Name = "nMenu2", .Text = "Menu2"}
            Dim oMenu3 As New ToolStripMenuItem With {.Text = "Menu3", .Name = "nMenu3"}
            Dim _contextmenu As New ContextMenuStrip
            _contextmenu.Items.AddRange(New ToolStripItem() {New ToolStripMenuItem With {.Text = "Menu1", .Name = "nMenu1"}, _
                                                             oMenu2, oMenu3})
            oMenu2.DropDownItems.AddRange(New ToolStripItem() {New ToolStripMenuItem() With {.Text = "SubItemMenu"}})
    
            Me.ContextMenuStrip = _contextmenu

    A bientot


    Cordialement,

    mardi 11 décembre 2012 19:57
    Auteur de réponse
  • Bonjour,

    Merci de ton aide aurais-tu un exemple avec le contrôle contextMenuStrip car j'ai essayé d'abord cette façon mais sans succès.

    Pour le moment j'ai ceci:

     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

    Mais je n'arrive pas a intercepter le click des mes sous menu alors qu'avec mes menus (Menu1, Menu2, Menu3) ça fonctionne:

        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

    mercredi 12 décembre 2012 08:22
  • Bonjour

    Vous devez ajouter un handler pour l’évènement Click du SousMenu.

        AddHandler smenu1.Click, AddressOf submenu_click

        AddHandler smenu2.Click, AddressOf submenu_click

        AddHandler smenu3.Click, AddressOf submenu_click

    Et pour le traitement de submenu_click vous avez:

    Private Sub submenu_click(ByVal sender As System.Object, _

                                  ByVal e As EventArgs)

            Dim clickCell As DataGridViewCell = data_grid_carnet.SelectedCells(0)

            data_grid_carnet.Rows(Me.data_grid_carnet.CurrentCell.RowIndex).Selected = True

            MsgBox(CType(sender, ToolStripMenuItem).Text)

            MsgBox(Me.data_grid_carnet.CurrentCell.RowIndex)

        End Sub

    Cordialement, 


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    • Marqué comme réponse Aurel Bera jeudi 13 décembre 2012 07:56
    mercredi 12 décembre 2012 12:01
  • Merci pour vos réponses 
    mercredi 12 décembre 2012 13:35
    • Marqué comme réponse neotof mercredi 12 décembre 2012 17:34
    • Non marqué comme réponse Aurel Bera jeudi 13 décembre 2012 07:56
    mercredi 12 décembre 2012 13:37