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.
精彩评论