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