我有一个带有文本框,我正在尝试确定是否在此文本框中按下了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)
{
// ...
}
}
如何判断他们是否同时按下?
答案 0 :(得分:5)
如果可能,请将您的活动更改为KeyDown
/ KeyUp
,一切都会更轻松。 (请注意,此解决方案并不总是适用)
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.R))
{
}
}
答案 1 :(得分: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