0

我有一个带有文本框的 from,我正在尝试确定是否在此文本框中按下了 Ctrl-R。我可以使用以下方法分别检测密钥:

private void CheckKeys(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if(e.KeyChar == (char)Keys.R)
    {
        // ...
    }
    if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
    {
        // ...
    }
}

我如何确定他们是否同时按下?

4

2 回答 2

5

如果可能,将您的事件更改为KeyDown/ KeyUp,一切都会变得更容易。(请注意,此解决方案并不总是适用)

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyData == (Keys.Control | Keys.R))
   {

   }
}
于 2010-12-20T05:31:08.663 回答
3

只要他取消删除,请参阅 Mitch 关于如何正确构建位标志逻辑的答案。如果他不决定这样做,这里有一些可行的方法。您基本上需要检查两个条件是否同时为真:

bool isRKeyPressed = e.KeyChar == (char)Keys.R;
bool isControlKeyPressed = (Control.ModifierKeys & Keys.Control) == Keys.Control;

if (isRKeyPressed && isControlKeyPressed)
{
    // Both ...
}
else if (isRKeyPressed)
{
    // R key only ...
}
else if (isControlKeyPressed)
{
    // CTRL key only ...
}
else
{
    // None of these...
}

扔掉任何你不关心的检查。

此外,您可能想查看这种替代方法: http: //www.codeguru.com/columns/experts/article.php/c4639

他们覆盖ProcessCmdKey表单上的方法(可能在单个控件上?):http: //msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx

于 2010-12-20T05:21:24.293 回答