0

我有一个捕获 KeyUp 事件的 DataGridView。我用它来捕获键盘副本(ctrl-c),然后对复制的文本执行我自己的格式化。当我首先释放“C”键时,一切正常,但如果我在仍然按住“C”的同时先释放“ctrl”,则不会触发事件。下面是事件的代码。我已经在复制上下文菜单项上处理它,但我知道我会让用户使用键盘快捷键,我希望一切都按预期工作。任何想法表示赞赏。

  /// <summary>
  /// Key up event handler
  /// </summary>
  void Control_KeyUp(object sender, KeyEventArgs e)
    {          
        if (e.KeyCode == Keys.C && e.Control == true )
        {
            CopyToClipboard(dgDS408Parameter.CurrentCell.EditedFormattedValue.ToString());               
        }
    }       
4

3 回答 3

1
public bool CtrlPressed=false;

void Control_KeyUp(object sender, KeyEventArgs e)
{          
    if (e.KeyCode == Keys.C && ctrlPressed == true )
    {
        CopyToClipboard(dgDS408Parameter.CurrentCell.EditedFormattedValue.ToString());                           
    }
    CtrlPressed=false;
}   

void Control_KeyDown(object sender, KeyEventArgs e)
{          
    if (e.Control == true )
    {
        CtrlPressed=true;
    }
}

我是写在心里的,没有经过测试,但是思路是这样的。

于 2012-05-28T11:22:00.593 回答
0

我认为您编写的代码存在逻辑错误

e.KeyCode == Keys.C && e.Control == true

这意味着当 Any 键触发 keyUp 事件时,“C”和“Cnt”两个键都必须处于按下状态。

所以这里发生的情况是当你按下 Cnt + C 没问题但是当你首先释放 'ctrl' 时条件是错误的

e.KeyCode == Keys.C && e.Control == true

这就是为什么您的数据没有复制到剪贴板的原因

于 2012-05-28T11:23:35.503 回答
0

为什么要使用 key-up 事件?所有其他程序在按键时执行相同的操作。KeyUp将您的活动从to更改为KeyDown,一切都会好起来的。

于 2012-05-28T12:15:36.067 回答