单击菜单项时如何获得上下文菜单结束的表单控件

时间:2019-03-14 08:50:11

标签: c#

我将一个ContextMenuStrip附加到两个控件(DataGridView)。

ToolStripMenuItem单击事件中,我目前使用:this.ActiveControl.Name获取活动的GridView控件名称;

如果我先选择GridView单元格而不是Rt,这很好。单击它以调用ContextMenu

情况:某个时候,如果GridView控件不是活动控件,并且预先选择了单元格,则上下文菜单项单击将无法正常工作。

有什么方法可以获取启动上下文菜单项单击事件的所有者名称?

当前,在ToolStripMenuItem click事件中,我设法使用以下代码获取了原始调用者(即DataGridView):

private void CopytoolStripMenuItem1_Click(object sender, EventArgs e)        
{
    var grid = new DataGridView();
    switch (this.ActiveControl.Name)
    {
        case "dGVEL1":
        {
            grid=dGVEL1;
            break;
        }
        case "dGVEL2":
        {
            grid=dGVEL2;
            break;
        }
    }
    if (grid == null)  return;
    DataObject data = grid.GetClipboardContent();
    Clipboard.SetDataObject(data);
}

1 个答案:

答案 0 :(得分:0)

最后,我已经解决了这个问题。 完整的解决方案是

    private void CopytoolStripMenuItem1_Click(object sender, EventArgs e)        
      {
        ToolStripDropDownItem item = sender as ToolStripDropDownItem;
        if (item == null) // Error
            return;
        ContextMenuStrip strip = item.Owner as ContextMenuStrip;
        var grid = strip.SourceControl as DataGridView;

        if (grid == null) // Control wasn't a DGV
            return;
        switch (grid.Name)
        {
            case "dGVEL1":
            {
                grid=dGVEL1;
                break;
            }
        case "dGVEL2":
            {
                grid=dGVEL2;
                break;
            }
       }
    if (grid == null)  return;
    DataObject data = grid.GetClipboardContent();
    Clipboard.SetDataObject(data);
    }