8

Birden çok denetim için ContextMenuStrip kullanıyorum ve Bağlam Menüsünü açmak için gerçekten tıklanan denetimi almanın en iyi yolunu bulmaya çalışıyorum. Gönderen, ContextMenuStrip'a başvuran bir Owner özelliğine sahip ToolStripMenuItem başvurusunu verir, ancak tıklamanın hangi denetimden geldiğini nasıl anlayacağımı anlayamıyorum. Bunu kontrol etmenin basit bir yolu olmalı, değil mi? ToolStripMenuItem'un tıklama etkinliğinde kontrol ediyorum. ContextMenuStrip'i açmak için tıklanan kontrole nasıl sahip olabilirsiniz?

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

Bu konuda similar post bulundu, ancak ben burada görmüyorum bir SourceControl özelliğini kullanarak bahseder.

Visual Studio 2008, VB.Net winforms kullanıyorum.

cevap

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

Teşekkürler, eksik olduğum şey buydu. –

6

Göndericiniz bir ToolStripMenuItem - bir dökümdür.
Sahibi bir ContextMenuStrip - olsun.

SourceControl, ContextMenuStrip öğesinin bir özelliğidir ve ContextMenuStrip'in görüntülendiği son denetimi referans alır.

+0

Tatlı ve noktasına! – 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 

'/// VB.NET 2013 öylesine ince bu iş üzerinde

-1

hızlı:

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