-1

datagridview を右クリックすると表示されるメニュー項目があります。ユーザーがメニュー項目にカーソルを合わせると、他のメニュー項目のリストが表示され、これが繰り返されます。このようなものを与えます。

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

3層目で扱うイベント(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
4

1 に答える 1

1

このようなものは、あなたが探しているものを得るはずです:

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

ただし、メニュー項目のタグを、それがどこから来ているかを知るために必要な情報に設定する方が簡単な場合があります。その後item.Tag、MenuItem クラスにキャストした後に確認することができます。

于 2012-05-21T14:19:08.337 に答える