Vb.net winforms菜单作为数组

Vb.net winforms菜单作为数组,vb.net,winforms,Vb.net,Winforms,我知道最有可能像数组一样访问winforms菜单,但我在VS2008的菜单设计器中没有看到它?我的意思是,我的应用程序顶部有一个典型的菜单栏,每个下拉菜单上有多个项目。正如所写的(我继承了这段代码),每个菜单项都是一个单独的名称,即 myMenuOption1MenuItem myMenuOption2MenuItem myMenuOption3MenuItem myMenuOption4MenuItem 等等 我需要能够根据用户权限启用或禁用(甚至隐藏/取消隐藏)菜单选项,例如: For I

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

myMenuOption1MenuItem
myMenuOption2MenuItem
myMenuOption3MenuItem
myMenuOption4MenuItem
等等

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

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

显然,我可以按名称设置/取消设置每个菜单项,但出于许多原因,我更喜欢使用循环。

每个子菜单项都在DropDownItems集合中,因此您可以循环使用它(如果您使用的是ToolStripMenuItems而不是旧样式的菜单)

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

ToolStripMenuItem
s通过
ContextMenuStrip.Items

For Each myItem As ToolStripMenuItem In myContextMenuStrip.Items
    myItem.Enabled = myUser.IsAdministrator
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
通过这种方式,您可以按如下方式访问每个事件:

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