2012-06-18 171 views
0

有沒有可能通過Vb.Net中的名稱引用對象的方法?如何通過名稱引用對象?

案例是,我的菜單項在我的設計器中創建,其名稱如MenuA,MenuB和MenuC。

在數據庫中,我創建了一個表,其中包含字符串格式的所有可用菜單的列表:MenuA,MenuB和MenuZ。

另外我創建了一個動態表格,包含用戶權限,某個用戶可以訪問哪個菜單。

所以當我啓動應用程序時,它會得到分配給記錄用戶的菜單名稱,並開始將Visible屬性設置爲TRUE。

如果它是一個控件,我只是通過Parent.Controls.Find(FoundMenu, True)來遍歷它。 我的問題是,它的大部分不是一個控件,它是一個項目添加到控制,甚至是另一個子項目添加到項目。

那麼我怎麼才能在我的用戶界面中找到一個對象,只有它的名字?

SearchQuery = "SELECT menu_name FROM tbl_menulist menu, tbl_user user WHERE menu.id_menu = user.id_menu" 
QueryReader = ExecuteQueryReader(SearchQuery) 

QueryReader.Read() 

//What I'm looking for is something like Controls.Find method to look for an object by name 
//Seems silly, but what I'm looking for is to create something like below 
//QueryReader(0).ToString = Menu Name 

Dim FoundMenu As Object = FindMenuByName(QueryReader(0).ToString) 
FoundMenu.Visible = True 

任何人都可以幫助我,我真的很感激任何建議。

謝謝:)

+0

這是一個WinForm應用程序嗎? –

回答

1

如果這是一個WinForm應用程序,您可以通過使用遞歸方法找到匹配的菜單項,如:

Private Function findMenuItem(ByVal name As String, ByVal menuStrip As MenuStrip) As ToolStripMenuItem 
    Return findMenuItem(name, menuStrip.Items) 
End Function 

Private Function findMenuItem(ByVal name As String, ByVal menuItems As IEnumerable(Of ToolStripItem)) As ToolStripMenuItem 
    Dim foundItem As ToolStripMenuItem = Nothing 
    For Each i As ToolStripMenuItem In menuItems.OfType(Of ToolStripMenuItem)() 
     If i.Name = name Then 
      foundItem = i 
      Exit For 
     Else 
      foundItem = findMenuItem(name, i.DropDownItems) 
      If foundItem IsNot Nothing Then 
       Exit For 
      End If 
     End If 
    Next 
    Return foundItem 
End Function 

然後,您可以使用它像這樣(其中MenuStrip1是您的頂級菜單條的名稱):

Dim menuItem As ToolStripMenuItem = findMenuItem(QueryReader(0).ToString, MenuStrip1) 
+0

謝謝SteveDog!你確定非常有幫助! –

+0

感謝的人,我忘了添加兩個 –

+0

如何通過此代碼跳過菜單項分隔符? –

相關問題