2012-05-21 76 views
-1

我有一個菜單項,當右鍵單擊datagridview時出現。用戶將鼠標懸停在菜單項上,出現其他菜單項列表,再次重複此操作。給予這樣的東西。MenuItem多個父親

--------- 
| FOO |--------- 
---------| BAR |------------ 
      ---------| FOOBAR | 
        ------------ 

在第三層只能處理一個事件(addressof)。據說,我需要從FOOBAR中獲取parent.name以及所述父母(祖父母)的parent.name。

這是我在這裏:

If currentMouseRow >= 0 AndAlso currentMouseColumn <= 1 Then 
      dataGridView_monitorMapping.Rows(currentMouseRow).Selected = True 
      mainMenu.MenuItems.Add(New MenuItem("Set Monitor(s) Settings")) 
      mainMenu.MenuItems.Add(New MenuItem("Sync Monitor Mapping View", AddressOf triggerSync)) 
      'list avaliable priorites 
      For Each priorityRow As DataRow In priorityTypesDS.Tables(0).Rows 
       Dim rowPriortiyName As String = CStr(priorityRow("Priority")) 
       Dim subMenu_priorities_item As New MenuItem(rowPriortiyName) 
       mainMenu.MenuItems(0).MenuItems.Add(subMenu_priorities_item) 
       'list avaliable boards 
       For Each boardRow As DataRow In serviceBoardDS.Tables(0).Rows 
        Dim rowBoardName As String = CStr(boardRow("SvcBrd")) 
        Dim subMenu_boards_item As New MenuItem(rowBoardName) 
        subMenu_priorities_item.MenuItems.Add(subMenu_boards_item) 
        'list avaliable types based on board 
        If rowBoardName IsNot Nothing Then 
         Dim availableSvcTypes As DataSet = GetServiceTypes(_objhost, serviceTypes, rowBoardName) 
         For Each svcTypeRow As DataRow In availableSvcTypes.Tables(0).Rows 
          Dim rowSvcTypeName As String = CStr(svcTypeRow(1)) 
          Dim subMenu_svcType_item As New MenuItem(rowSvcTypeName, AddressOf triggerSync) 
          subMenu_boards_item.MenuItems.Add(subMenu_svcType_item) 
         Next 
        End If 
       Next 
      Next 
      mainMenu.Show(dataGridView_monitorMapping, New Point(e.X, e.Y)) 
     End If 

且事件處理程序

Public Sub updateMultiRowSettingChange(ByVal Sender As System.Object, ByVal e As System.EventArgs) 
    'TODO | Handle selection from right click menu. 
End Sub 

回答

2

像這樣的東西應該得到你在找什麼:

Public Sub updateMultiRowSettingChange(ByVal Sender As System.Object, ByVal e As System.EventArgs) 
    Dim item As MenuItem = CType(sender, MenuItem) 
    Dim parent As MenuItem = CType(item.Parent, MenuItem) 
    Dim grandparent As Menu = parent.Parent 
End Sub 

然而,將菜單項上的標籤設置爲任何您需要知道其來源的信息可能會更簡單如果將它轉換爲MenuItem類後,您可以檢查item.Tag

+0

完美,非常感謝! – Ealianis