当我使用快捷键时,获取ContextMenuStrip的SourceControl

我有单个ContextMenuStrip附加到两个控件( DataGridView )。
ToolStripMenuItem单击事件中,我设法使用以下代码获取原始调用者( DataGridView ):

 var menu = (ToolStripDropDownItem)sender; var strip = (ContextMenuStrip)menu.Owner; var dgv = (DataGridView)strip.SourceControl; 

当我点击ToolStripMenuItem时它工作得很好。
但是当我使用链接到ToolStripMenuItem的sortcut键时,条带。 SourceControl返回null。
有谁知道为什么?

SourceControl属性显示导致ContextMenuStrip打开的控件。 由于在这种情况下ContextMenuStrip不显示,因此没有用于打开它的控件,因此该属性为null。

此属性更适合在开幕活动的上下文中使用。 请参见ContextMenuStrip.SourceControl 。

更新:找出哪个DataGridView是ToolStripMenuItem点击的预期接收者的一种方法是查看哪个具有焦点:

 var dgv = this.ActiveControl as DataGridView; if ( dgv != null) // make sure to check for null before trying to use this var //...