Search code examples
.netvb.netcontextmenutoolstrip

SourceControl of ContextMenuStrip is Nothing in ToolStripMenuItem Click?


I have single ContextMenuStrip attached 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


Solution

  • 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.