使用快捷键时获取ContextMenuStrip的SourceControl

时间:2011-04-14 14:47:56

标签: c# winforms contextmenu

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

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

当我点击ToolStripMenuItem时,它的效果非常好 但是当我使用链接到ToolStripMenuItem的排序键时,条带。SourceControl返回null 有谁知道为什么?

1 个答案:

答案 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
    //...