C#用户控制键盘快捷方式
我已经创建了一个用户控件,它有多个文本框、组合框等。用户控件托管在一个普通表单上。我想为文本框、组合框指定键盘快捷方式。因此,当按下Ctrl+F组合键时,焦点将放在其中一个文本框上。我已经尝试使用OnPreviewKeyDown检查键,然后在用户控件上启动key-down方法。调试器甚至没有在窗体上点击OnPreviewKeyDown方法。我已经在表单上启用了keyPreview。我在下面提供了我的一些实验 有人能指出我哪里出了问题吗?我真不敢相信这样的事情会这么难。我一定错过了一些简单的东西。谢谢C#用户控制键盘快捷方式,c#,user-controls,keyboard-shortcuts,C#,User Controls,Keyboard Shortcuts,我已经创建了一个用户控件,它有多个文本框、组合框等。用户控件托管在一个普通表单上。我想为文本框、组合框指定键盘快捷方式。因此,当按下Ctrl+F组合键时,焦点将放在其中一个文本框上。我已经尝试使用OnPreviewKeyDown检查键,然后在用户控件上启动key-down方法。调试器甚至没有在窗体上点击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;
}
}
我建议你试试这个。它接受一个参数,其中包括一个专门用于Ctrl键()的布尔值
在本例中,您将比较属性以查看是否按下了F
,并检查Control
是否为true。例如:
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
事件,您可以检查static属性的值并查看是否按下了Ctrl键,如下所示:
if( (Control.ModifierKeys & Keys.Control) == Keys.Control )
{
//...
}
我建议你试试这个。它接受一个参数,其中包括一个专门用于Ctrl键()的布尔值
在本例中,您将比较属性以查看是否按下了F
,并检查Control
是否为true。例如:
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
事件,您可以检查static属性的值并查看是否按下了Ctrl键,如下所示:
if( (Control.ModifierKeys & Keys.Control) == Keys.Control )
{
//...
}
你知道重点是用户控件吗?否则,您可能必须处理表单中的关键事件,并使该代码选择用户控件中的文本区域。请指明这是WPF还是WinformsDo您知道焦点在用户控件上吗?否则,您可能必须处理表单中的关键事件,并使该代码选择用户控件中的文本区域。请指明这是WPF还是Winforms