8

Sto utilizzando un ContextMenuStrip per più controlli e sto cercando di capire il modo migliore per ottenere il controllo su cui è stato effettivamente fatto clic per aprire il menu di scelta rapida. Il mittente fornisce semplicemente il riferimento ToolStripMenuItem, che ha una proprietà Owner che fa riferimento allo ContextMenuStrip, ma non riesco a capire come determinare il controllo da cui proviene il clic. Ci deve essere un modo semplice per controllare questo, giusto? Lo sto verificando nell'evento click di ToolStripMenuItem.Come si ottiene il controllo su cui è stato fatto clic per aprire 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 

Ho trovato un similar post su questo, ma che menzioni utilizzando una proprietà SourceControl, che non vedo qui.

Utilizzo Visual Studio 2008, winform VB.Net.

risposta

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

Grazie, era quello che mi mancava. –

6

Il tuo mittente è un oggetto ToolStripMenuItem - lanciato.
Il proprietario è un ContextMenuStrip: ottieni.

SourceControl è una proprietà di ContextMenuStrip e fa riferimento all'ultimo controllo da cui è stato visualizzato ContextMenuStrip.

+0

dolce e al punto! – 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 

'/// veloce

-1

In VB.NET 2013 questo lavoro così bella:

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