8

J'utilise un ContextMenuStrip pour plusieurs contrôles et j'essaie de trouver le meilleur moyen d'obtenir le contrôle sur lequel on a cliqué pour ouvrir le menu contextuel. L'expéditeur donne juste la référence ToolStripMenuItem, qui possède une propriété Owner qui référence le ContextMenuStrip, mais je n'arrive pas à comprendre comment déterminer le contrôle d'où provient le clic. Il doit y avoir un moyen simple de vérifier cela, non? Je le vérifie dans l'événement de clic ToolStripMenuItem.Comment obtenez-vous le contrôle sur lequel vous avez cliqué pour ouvrir un ContextMenuStrip?

Friend WithEvents mnuWebCopy As System.Windows.Forms.ToolStripMenuItem 
... 
Private Sub mnuWebCopy_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuWebCopy.Click 

J'ai trouvé un similar post à ce sujet, mais qui mentionne l'utilisation d'une propriété SourceControl que je ne vois pas ici. J'utilise Visual Studio 2008, winforms VB.Net.

Répondre

20
Private Sub mnuWebCopy_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuWebCopy.Click 

Dim myItem As ToolStripMenuItem = CType(sender, ToolStripMenuItem) 
Dim cms As ContextMenuStrip = CType(myItem.Owner, ContextMenuStrip) 

MessageBox.Show(cms.SourceControl.Name) 

End Sub 
+0

Merci, c'était ce qui me manquait. –

6

Votre expéditeur est un outil ToolStripMenuItem.
Son propriétaire est un ContextMenuStrip - l'obtenir. SourceControl est une propriété de ContextMenuStrip et référence le dernier contrôle à partir duquel ContextMenuStrip a été affiché.

+0

doux et au point! – HumbleBeginnings

0
Private Sub kdgToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles kdgToolStripMenuItem.Click 
    Dim sms = (sender.GetCurrentParent()).SourceControl.name 
    MsgBox(sms) 
End Sub 

« /// Plus rapide

-1

Sur VB.NET 2013 ce travail si bien:

Dim cms As ContextMenuStrip = CType(sender, ContextMenuStrip) 
MessageBox.Show(cms.SourceControl.Name) 
0
Private Sub cmsRightClick_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cmsRightClick.MouseClick 
    Dim s As String = CType(sender, ContextMenuStrip).GetItemAt(CType(sender, ContextMenuStrip).DisplayRectangle.X, _ 
    CType(sender, ContextMenuStrip).DisplayRectangle.Y + e.Y).Text.Trim() 


    MsgBox(s) 
    Select Case s 
     Case Is = "Select Summary Total" 
      Dim x = 0 
     Case Is = "Select Collections" 
      Dim x = 1 
     Case Is = "UnSelect" 
      Dim x = 2 
     Case Is = "Reconcile" 
      Dim x = 3 
     Case Is = "Undo Reconciliation" 
      Dim x = 4 
    End Select 
End Sub 
Questions connexes