2008-11-17 64 views
2

我需要在運行時從數據庫填充上下文菜單。我不知道列表中的項目數量,所以我想在一個地方處理點擊事件。我如何聲明處理程序,以便我可以知道哪個菜單項實際觸發了點擊。添加處理程序到動態創建的上下文菜單

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 

回答

0

你ForwardToList_Click()應包括髮件人和事件參數的參數:

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

「發件人」是導致事件,這是什麼,我相信你正在尋找的控制。

1
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) 
0

無法添加評論,所以我會把它放在這裏。從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 
相關問題