SourceControl из ContextMenuStrip ничего не значит в ToolStripMenuItem Нажмите? - PullRequest
0 голосов
/ 22 июня 2010

У меня есть один ContextMenuStrip, присоединенный к большему количеству элементов управления.

Используется событие Opening ContextMenuStrip для фильтрации / отключения некоторых записей контекста.В этом случае свойство ContexteMenuStrip.SourceControl установлено правильно.

У меня проблема с событием Click ToolStripMenuItem.Этот предмет находится внутри ToolStripDropDown.

Я получаю родительский элемент с кодом:

Dim tsmi As ToolStripMenuItem = DirectCast(DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ToolStripDropDown).OwnerItem, ToolStripMenuItem)

, затем я получаю ContextMenuStrip:

Dim contextMenu As ContextMenuStrip = DirectCast(tsmi.Owner, ContextMenuStrip)

, но теперь, если я проверяю contextMenu.SourceControl, это Nothing.

У вас есть идеи, что не так или почему SourceControl не установлен в этом случае?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 28 июня 2010

Я нашел обходной путь, который на самом деле не является ответом на вопрос.Поэтому я оставлю его открытым некоторое время.

Я использовал событие ContextMenuStrip Opening для локального хранения исходного объекта.

Private Sub contextGrid_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles contextGrid.Opening

  _ContextSourceGrid = DirectCast(contextGrid.SourceControl, DataGridView)

End Sub

и обращения непосредственно к сохраненному объекту внутривсе ToolStripMenuItem Click события.

1 голос
/ 18 августа 2011

Попробуйте это:

DirectCast(DirectCast(DirectCast(
    tsmi.Owner, System.Windows.Forms.ToolStrip).
    TopLevelControl, System.Windows.Forms.Control),
    System.Windows.Forms.ContextMenuStrip).SourceControl
0 голосов
/ 23 июня 2010

У меня был точно такой же вопрос пару недель назад, и на самом деле никто не мог понять, почему происходит такое поведение.Посмотрите на вопрос , который я задал , решение, которое мне дали, сработало замечательно.

...