我创建了一个用户控件,它有多个文本框,组合框等。用户控件托管在普通表单上。我想为文本框,组合框分配键盘快捷方式。因此,当按住Ctrl + F时,焦点将放在其中一个文本框上。我已经尝试使用OnPreviewKeyDown来检查密钥,然后在用户控件上触发密钥关闭方法。调试器甚至没有命中窗体上的OnPreviewKeyDown方法。我已经在表单上启用了keyPreview。我在下面提供了一些实验。
有谁可以指出我哪里出错了?我无法相信这样的事情是如此困难。我一定很遗憾。感谢
protected override void OnPreviewKeyDown(PreviewKeyDownEventArgs e)
{
Keys k = e.KeyCode;
UserControl1.UserControl_KeyPress(k);
}
public void UserControl_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 'F')
tbxHostName.Focus();
switch (e.KeyCode)
{
case Keys.F:
this.cmbxProtocol.Focus();
break;
case Keys.H:
this.tbxHostName.Focus();
break;
default:
break;
}
}
答案 0 :(得分:1)
我建议您尝试KeyDown Event。它接受一个KeyEventArgs参数,其中包含一个专门用于Ctrl键的布尔值(KeyEventArgs.Control)。
在您的情况下,您会将KeyCode属性与Keys.F进行比较,以查看是否按下了F
,并检查Control
是否为真。例如:
public void UserControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control)
{
switch (e.KeyCode)
{
case Keys.F:
this.cmbxProtocol.Focus();
break;
// Other cases ...
default:
break;
}
}
}
或者,如果你真的想坚持你的KeyPress
事件,你可以检查静态Control.ModifierKeys属性的值,看看是否按下了Ctrl键,如下所示:
if( (Control.ModifierKeys & Keys.Control) == Keys.Control )
{
//...
}