为什么我不能在我的 DataGridView 中捕获 Ctrl-C
Why can't I capture Ctrl-C in my DataGridView
好像一个小时了。我只想在编辑我的 DataGridView 时实现复制和粘贴。也许我要求太多了?
这就是我目前所拥有的。初始化:
dataGridView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView_EditingControlShowing);
我猜哪个叫:
private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyDown += Control_KeyDown;
}
我们有:
private void Control_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
{
System.Diagnostics.Debug.WriteLine("control c");
}
}
我可以夺取控制权。我可以捕获 C。我无法捕获 Ctrl-C。不可能的。
KeyDown
事件仅在DataGridView
中的单元格处于编辑模式时触发,因此键盘快捷键事件捕获器在其他情况下将不起作用。您可以通过如下指向 KeyDown
事件处理程序来解决此问题:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl tb = e.Control as DataGridViewTextBoxEditingControl;
tb.KeyDown -= dataGridView_KeyDown;
tb.PreviewKeyDown -= Control_KeyDown;
tb.KeyDown += dataGridView_KeyDown;
tb.PreviewKeyDown += Control_KeyDown;
}
}
private void Control_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.C))
{
System.Diagnostics.Debug.WriteLine("control c");
}
}
this post 中提供了类似的讨论。
好像一个小时了。我只想在编辑我的 DataGridView 时实现复制和粘贴。也许我要求太多了?
这就是我目前所拥有的。初始化:
dataGridView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView_EditingControlShowing);
我猜哪个叫:
private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyDown += Control_KeyDown;
}
我们有:
private void Control_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
{
System.Diagnostics.Debug.WriteLine("control c");
}
}
我可以夺取控制权。我可以捕获 C。我无法捕获 Ctrl-C。不可能的。
KeyDown
事件仅在DataGridView
中的单元格处于编辑模式时触发,因此键盘快捷键事件捕获器在其他情况下将不起作用。您可以通过如下指向 KeyDown
事件处理程序来解决此问题:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl tb = e.Control as DataGridViewTextBoxEditingControl;
tb.KeyDown -= dataGridView_KeyDown;
tb.PreviewKeyDown -= Control_KeyDown;
tb.KeyDown += dataGridView_KeyDown;
tb.PreviewKeyDown += Control_KeyDown;
}
}
private void Control_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.C))
{
System.Diagnostics.Debug.WriteLine("control c");
}
}
this post 中提供了类似的讨论。