Ctrl + C在Windows窗体应用程序中无法正常工作

ani*_*kun -1 c# datagridview copy-paste winforms

我在DataGridView上有一个事件将数据复制到剪贴板,但我的事件没有检测到Ctrl+ C正确按下(我必须按Ctrl+ C约15次,以使此事件检测Ctrl+ C按下).

这是代码:

    private void DataGridView_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyData == (Keys.Control | Keys.C))
        {
            DataObject d = DataGridView.GetClipboardContent();
            Clipboard.SetDataObject(d);
            e.Handled = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么这样?

我按Ctrl+ 时会发生什么的屏幕截图C

在此输入图像描述

Han*_*ant 5

您的屏幕截图显示您检测到正在释放Ctrl键.不是你当然的事.

您无法使用KeyUp事件执行此操作,DataGridView已截取Ctrl + C供自己使用.合乎逻辑的是,将选定的单元格,列或行复制到剪贴板.确保它没有做你需要它做的事情.

如果你想覆盖它,那么你需要保持领先于DGV.这要求您从DataGridView派生自己的类并重写ProcessCmdKey()方法.在项目中添加一个类,使其如下所示:

using System;
using System.Windows.Forms;

class MyDataGridView : DataGridView {
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == (Keys.Control | Keys.C)) {
            // Do stuff
            //..
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
Run Code Online (Sandbox Code Playgroud)