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

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

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

最佳答案

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

此属性更适合在打开事件的上下文中使用。见 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
    //...

关于c# - 使用快捷键时获取我的 ContextMenuStrip 的 SourceControl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5665042/

10-11 11:22