8

Estoy usando un ContextMenuStrip para controles múltiples y estoy tratando de averiguar la mejor manera de obtener el control que se hizo clic para abrir el menú contextual. El remitente simplemente da la referencia ToolStripMenuItem, que tiene una propiedad Owner que hace referencia al ContextMenuStrip, pero no puedo encontrar la forma de decir de qué control proviene el clic. Debe haber una forma simple de verificar esto, ¿verdad? Lo estoy verificando en el evento de clic ToolStripMenuItem.¿Cómo se obtiene el control que se hizo clic para abrir 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 

encontré una similar post sobre esto, pero que menciona el uso de una propiedad SourceControl la que no veo aquí.

Estoy usando Visual Studio 2008, VB.Net winforms.

Respuesta

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

Gracias, eso era lo que me estaba perdiendo. –

6

Su remitente es un ToolStripMenuItem - cast it.
Su propietario es un ContextMenuStrip - obténgalo.

SourceControl es una propiedad en el ContextMenuStrip y hace referencia al último control desde el que se visualizó ContextMenuStrip.

+0

dulce y 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 

'/// rápido

-1

En VB.NET 2013 este trabajo tan fino:

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 
Cuestiones relacionadas