为什么我不能在我的 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 中提供了类似的讨论。