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

 .NET Discussion :

Questions sur le contextMenuStrip(sous menus) [VB.NET]


Sujet :

.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    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 : 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
    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 actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    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
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    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 actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    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 : 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
    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 : 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
    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
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    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.

Discussions similaires

  1. [FAQ] Questions sur le débogage sous Perl
    Par Lolo78 dans le forum Contribuez
    Réponses: 7
    Dernier message: 14/07/2014, 21h51
  2. [quota] deux trois questions sur les quota sous Redhat
    Par pierrot10 dans le forum Administration système
    Réponses: 3
    Dernier message: 25/03/2009, 12h38
  3. Question sur des requêtes sous Crystal X
    Par Banzai31 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 23/10/2008, 12h35
  4. QUESTION SUR AVG, Sous Access
    Par sylvaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2003, 14h51

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