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

您的屏幕截图显示您检测到正在释放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)