我将单ContextMenuStrip
附加到两个控件(DataGridView
)
在ToolStripMenuItem
点击事件中,我设法使用以下代码获取原始调用者(DataGridView
):
var menu = (ToolStripDropDownItem)sender;
var strip = (ContextMenuStrip)menu.Owner;
var dgv = (DataGridView)strip.SourceControl;
当我点击ToolStripMenuItem
时,它的效果非常好
但是当我使用链接到ToolStripMenuItem
的排序键时,条带。SourceControl
返回null
有谁知道为什么?
答案 0 :(得分:4)
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
//...