2008-11-17 63 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 
相关问题