开发者

SourceControl of ContextMenuStrip is Nothing in ToolStripMenuItem Click?

开发者 https://www.devze.com 2023-01-04 02:44 出处:网络
I have single ContextMenuStrip att开发者_如何转开发ached to more controls. In use the Opening event of ContextMenuStrip to filter/disable some context entries.

I have single ContextMenuStrip att开发者_如何转开发ached to more controls.

In use the Opening event of ContextMenuStrip to filter/disable some context entries. In this case the property ContexteMenuStrip.SourceControl is set correctly.

The problem I have is on the Click event of a ToolStripMenuItem. This item is inside a ToolStripDropDown.

I get the parent item with code:

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

then I get the ContextMenuStrip:

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

but now, if I check contextMenu.SourceControl is Nothing.

Do you have any idea what is wrong or why SourceControl is not set in this case?

Thank you in advance


I found a workaround that is not really the answer to the question. So I will leave it open for a while.

I used the ContextMenuStrip Opening event to store locally the source object.

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

and refer directly to the saved object inside all ToolStripMenuItem Click events.


Try this:

DirectCast(DirectCast(DirectCast(
    tsmi.Owner, System.Windows.Forms.ToolStrip).
    TopLevelControl, System.Windows.Forms.Control),
    System.Windows.Forms.ContextMenuStrip).SourceControl


I had this exact same question a couple weeks ago, and in reality, nobody could figure out why this behavior was occurring. Take a look at the question I asked, the solution I was given worked great.

0

精彩评论

暂无评论...
验证码 换一张
取 消