2009-06-20 24 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 
相關問題