Как вы получаете элемент управления, который был нажат, чтобы открыть ContextMenuStrip?

Я использую ContextMenuStrip для нескольких элементов управления и пытаюсь найти лучший способ получить элемент управления, на который фактически нажали, чтобы открыть контекстное меню. Отправитель просто дает ссылку ToolStripMenuItem, у которой есть свойство Owner, которое ссылается на ContextMenuStrip, но я не могу понять, как определить, из какого элемента управления был сделан щелчок. Должен быть простой способ проверить это, верно? Я проверяю это в событии клика ToolStripMenuItem.

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

Я нашел похожий пост о this, но в нем упоминается использование свойства SourceControl, которого я здесь не вижу.

Я использую Visual Studio 2008, VB.Net winforms.


person Shawn Steward    schedule 15.01.2010    source источник


Ответы (4)


Ваш отправитель – это ToolStripMenuItem – приведите его.
Его владельцем – ContextMenuStrip – получите его.

SourceControl является свойством ContextMenuStrip и ссылается на последний элемент управления, из которого был отображен ContextMenuStrip.

person Jay    schedule 15.01.2010

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

'///Быстрее

person KDG    schedule 10.10.2014

В VB.NET 2013 это работает так хорошо:

Dim cms As ContextMenuStrip = CType(sender, ContextMenuStrip)
MessageBox.Show(cms.SourceControl.Name)
person Mingut    schedule 10.02.2015

person    schedule
comment
Спасибо, это то, чего мне не хватало. - person Shawn Steward; 16.01.2010