ContextMenuStrip 菜单的使用技巧

本人做了一个 DataGridView用来显示数据库中的字段,为了能够让用户可以自定义要显示的字段,特加上右键菜单功能运行效果图如下:

ContextMenuStrip 菜单的使用技巧_第1张图片

为了实现这个例子,必须完成下面要求:

1、能够根据DataGridView的列名动态生成菜单项
2、能够选择多个选项,保证菜单不消失
3、选择完成后,根据菜单的选择情况,控制DataGridView的列的显示

代码如下:

   Private   Sub DataGridView1_GotFocus(ByVal sender As ObjectByVal e As System.EventArgs) Handles DataGridView1.GotFocus
        
'动态生成菜单项的过程
        With Me.DataGridView1
            
'清除菜单项
            Me.ContextMenuStrip1.Items.Clear()
            
'添加标题
            Dim Menu_item1 As ToolStripMenuItem = New ToolStripMenuItem
            Menu_item1.Text 
= "选择显示的字段"
            Menu_item1.Enabled 
= False
            
Me.ContextMenuStrip1.Items.Add(Menu_item1)
            
'添加分割线
            Dim fgx As ToolStripSeparator = New ToolStripSeparator
            
Me.ContextMenuStrip1.Items.Add(fgx)
            
'根据DataGridView的列名称添加菜单项
            Dim i As Int16
            
For i = 0 To .ColumnCount - 1
               

                Dim Menu_item As ToolStripMenuItem = New ToolStripMenuItem
                Menu_item.Text 
= .Columns(i).HeaderText
                Menu_item.Checked 
= .Columns(i).Visible
                
Me.ContextMenuStrip1.Items.Add(Menu_item)
            
Next
        
End With

    
End Sub



    
Private   Sub ContextMenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
        
'点击菜单项时,菜单项的选定状态取反
        '被点击的菜单项为 e.ClickedItem
        CType(e.ClickedItem, ToolStripMenuItem).Checked = Not CType(e.ClickedItem, ToolStripMenuItem).Checked

    
End Sub


    
Private   Sub ContextMenuStrip1_Closing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripDropDownClosingEventArgs) Handles ContextMenuStrip1.Closing
        
'取消点击选项就消失,这样只有在菜单外的区域点击菜单才会消失
        '在此判断引发时间的原因即“e.CloseReason”的值

        If e.CloseReason.ToString = "ItemClicked" Then
            e.Cancel 
= True
        
End If
    
End Sub


    
Private   Sub ContextMenuStrip1_Closed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripDropDownClosedEventArgs) Handles ContextMenuStrip1.Closed
        
'关闭菜单时把选定的结果应用到DataGridView
        Dim i As Int16
        
For i = 2 To Me.ContextMenuStrip1.Items.Count - 1
            
'这里我们需要设置被点击的菜单项(ToolStripMenuItem)的Checked状态,但是我们不能直接通过Me.ContextMenuStrip1.Items(i).Checked的方式操作,必须把它进行类型转换,同样的情况见“ContextMenuStrip1.ItemClicked”
            Me.DataGridView1.Columns(Me.ContextMenuStrip1.Items(i).Text).Visible = CType(Me.ContextMenuStrip1.Items(i), ToolStripMenuItem).Checked()

        
Next
    
End Sub

你可能感兴趣的:(数据库,object,menu)