2008-11-17 11 views
2

Je dois renseigner un menu contextuel à partir d'une base de données lors de l'exécution. Je ne connais pas le nombre d'éléments qui seront dans la liste, donc je voudrais gérer l'événement click en un seul endroit. Comment puis-je déclarer le gestionnaire afin que je puisse dire quel élément de menu a déclenché le clic.Ajout de gestionnaires au menu contextuel créé dynamiquement

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 

Répondre

0

Votre ForwardToList_Click() devrait inclure des paramètres de l'expéditeur et l'événement args:

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

« expéditeur » est le contrôle qui a provoqué l'événement, ce qui est ce que je crois que vous cherchez.

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

Impossible d'ajouter un commentaire, donc je le mettrai ici. réponse excellente de AundyKarthick facilement mis à mon résultat était le suivant:

d'abord créer un ContextMenuStrip sur la forme dans ce cas 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