【发布时间】:2016-12-01 23:30:59
【问题描述】:
我正在尝试在派生自 DataGridView 的用户控件中实现 CTRL+C 复制操作。
我希望 Ctrl+C 复制 datagridview 中选定的单元格,Ctrl+Shift+C 复制选定的单元格和单元格列标题文本。
我已经设置了两个复制程序,它们工作正常。我遇到的问题是分配 key_down 处理程序。
这是我的 keyDown 代码:
protected virtual void DataGridViewEx_KeyDown(object sender, KeyEventArgs e)
{
System.Diagnostics.Debug.WriteLine("-------------------------------");
System.Diagnostics.Debug.WriteLine("KeyCode = " + e.KeyCode.ToString());
System.Diagnostics.Debug.WriteLine("KeyValue = " + e.KeyValue.ToString());
System.Diagnostics.Debug.WriteLine("KeyData = " + e.KeyData.ToString());
System.Diagnostics.Debug.WriteLine("Modifiers = " + e.Modifiers.ToString());
System.Diagnostics.Debug.WriteLine("-------------------------------");
if ((e.Control & e.Shift) && e.KeyCode == Keys.C)
{
System.Diagnostics.Debug.WriteLine("CTRL+SHIFT+C Pressed");
CopyToClipboard(CopyMode.SelectedCellsWithHeaders);
e.Handled = true;
}
if (e.Control && e.KeyCode == Keys.C)
{
System.Diagnostics.Debug.WriteLine("CTRL+C Pressed");
CopyToClipboard(CopyMode.SelectedCellsOnly);
e.Handled = true;
}
else if (e.Control && e.KeyCode == Keys.V)
{
PasteClipboard();
e.Handled = true;
}
}
现在:这是我不明白的一点: 当我在空网格(即没有数据、列等)上尝试此操作时,我得到以下信息:
Ctrl+C:
键码 = C 键值 = 67 KeyData = C、Shift、Control 修饰符 = Shift、Control
Ctrl+Shift+C
键码 = C 键值 = 67 KeyData = C、Shift、Control 修饰符 = Shift、Control
但是:一旦我将数据粘贴到网格中,完全相同的 keydown 操作会产生:
Ctrl+C
键码 = C 键值 = 67 KeyData = C,控制 修饰符 = 控制
Ctrl+Shift+C
KeyCode = ShiftKey 键值 = 16 KeyData = ShiftKey、Shift、Control 修饰符 = Shift、Control
当网格中有数据时,不再识别“C”键,我只得到 Ctrl+Shift。
单元格未处于编辑模式(您可以看到 Ctrl+C 工作正常)。我可以将其更改为 Ctrl+K 之类的东西,但我想了解这里可能发生的情况。有什么想法吗?
【问题讨论】:
标签: c# datagridview keyboard-shortcuts keydown