Добавление обработчиков в динамически создаваемое контекстное меню - PullRequest
2 голосов
/ 17 ноября 2008

Мне нужно заполнить контекстное меню из базы данных во время выполнения. Я не знаю, сколько элементов будет в списке, поэтому я бы хотел обработать событие click в одном месте. Как мне объявить обработчик, чтобы я мог сказать, какой пункт меню фактически вызвал щелчок.

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

Ответы [ 3 ]

1 голос
/ 25 декабря 2010
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)
1 голос
/ 03 января 2014

Не могу добавить комментарий, поэтому я выложу его здесь. Отличный ответ от 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
0 голосов
/ 17 ноября 2008

Ваш ForwardToList_Click () должен включать параметры для отправителя и аргументов событий:

Public Sub ForwardToList_Click(sender As Object, e As EventArgs)
'...
End Sub

«отправитель» - это элемент управления, вызвавший событие, которое, как я полагаю, вы ищете.

...