2009-06-20 36 views
0

我知道它最有可能访问像数组一样的winforms菜单,但我没有看到它在VS2008的菜单设计器中?我的意思是,我的应用在顶部有一个典型的菜单栏,每个下拉菜单上有多个项目。由于这是写(我继承了这个代码),每个菜单项是一个独立的名字,即winforms菜单作为数组

myMenuOption1MenuItem 
myMenuOption2MenuItem 
myMenuOption3MenuItem 
myMenuOption4MenuItem 

等等

我需要启用或禁用的能力(甚至隐藏/取消隐藏)根据用户权限的菜单选项,例如:

For I = 0 to maxIndex 
    myMenuOption(I).Enabled = myUser.IsAdministrator 
Next 

很显然,我可以设置/取消按名称每个菜单项,但对于很多原因,我更愿意使用循环。

回答

2

ToolStripMenuItem s的通过ContextMenuStrip.Items

For Each myItem As ToolStripMenuItem In myContextMenuStrip.Items 
    myItem.Enabled = myUser.IsAdministrator 
Next 
1

每个子菜单项都在DropDownItems集合中 - 所以您可以循环浏览(如果您使用的是ToolStripMenuItems而不是旧式菜单)。

0
For Each Menu As ToolStripMenuItem In MenuPrincipal.Items 

    For Each Item As ToolStripItem In Menu.DropDownItems 
     If TypeOf (Item) Is ToolStripMenuItem Then 
      AddHandler Item.Click, AddressOf Menu_OnClick 
     End If 

    Next 

Next 

这样,您就可以访问每一个事件如下暴露:

Private Sub Menu_OnClick(ByVal sender As Object, ByVal e As System.EventArgs) 

    Dim Frm As Form = GetFormByName(sender.name) 
    If sender.Tag = "Modal" Then 
     Frm.ShowDialog(Me) 
    ElseIf sender.Tag = "Modeless" Then 
     Frm.Show(Me) 
    Else 
     OpenForm(Frm, True) 
    End If 

End Sub