動的に作成されたコンテキストメニューへのハンドラーの追加
-
08-07-2019 - |
質問
実行時にデータベースからコンテキストメニューを作成する必要があります。リストに含まれるアイテムの数がわからないので、クリックイベントを1か所で処理したいと思います。どのメニュー項目が実際にクリックをトリガーしたかを確認できるように、ハンドラーを宣言するにはどうすればよいですか。
Public Function GetBookmarkContextMenu(ByVal aBookmark As Bookmark) As System.Windows.Controls.ContextMenu
Dim myContextMenu As New Controls.ContextMenu
myContextMenu.Name = "BookmarkMenu"
For Each aMailingList As MasterService.FalconBookmarkMailingListType In GlobalUserSettings.MailingLists
Dim mySubMenuItem As New Controls.MenuItem
mySubMenuItem.Name = "MailingListName" & aMailingList.ID.ToString
mySubMenuItem.Header = aMailingList.Title
AddHandler (myMenuItem.Click), AddressOf ForwardToList_Click
mySubMenuItem.IsEnabled = True
myMenuItem.Items.Add(mySubMenuItem)
Next
myContextMenu.Items.Add(myMenuItem)
return myContextMenu
End Function
Public Sub ForwardToList_Click()
'How do I know which of the dynamically created items was clicked?
End Sub
解決
ForwardToList_Click()には、送信者およびイベント引数のパラメーターを含める必要があります。
Public Sub ForwardToList_Click(sender As Object, e As EventArgs)
'...
End Sub
"送信者"イベントを引き起こしたコントロールであり、あなたが探していると思います。
他のヒント
Dim mnuitm As New ToolStripMenuItem
mnuitm.Name = name_cbk.Items(i)
mnuitm.Text = name_cbk.Items(i)
AddHandler (mnuitm.Click), AddressOf item_Click
menulist.Items.Add(mnuitm)
コメントを追加できないため、ここに入力します。 AundyKarthickからの優れた返信は簡単に設定できます 私の結果はこれでした:
最初にフォーム上のcontextmenustripを作成します。この場合はContextMenuStrip1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
NamesTableAdapter.Fill(DataSet.Names)
For Each element In DataSet.Names
Dim mnuitem As New ToolStripMenuItem
mnuitem.Name = element.Item(1)
mnuitem.Text = element.Item(1)
AddHandler (mnuitem.Click), AddressOf ToolMenuItem_Click
ContextMenuStrip1.Items.Add(mnuitem)
Next
End Sub
Private Sub ToolMenuItem_Click(sender As Object, ByVal e As EventArgs)
textbox1.Text = sender.name
End Sub
所属していません StackOverflow