Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#用户控制键盘快捷方式_C#_User Controls_Keyboard Shortcuts - Fatal编程技术网

C#用户控制键盘快捷方式

C#用户控制键盘快捷方式,c#,user-controls,keyboard-shortcuts,C#,User Controls,Keyboard Shortcuts,我已经创建了一个用户控件,它有多个文本框、组合框等。用户控件托管在一个普通表单上。我想为文本框、组合框指定键盘快捷方式。因此,当按下Ctrl+F组合键时,焦点将放在其中一个文本框上。我已经尝试使用OnPreviewKeyDown检查键,然后在用户控件上启动key-down方法。调试器甚至没有在窗体上点击OnPreviewKeyDown方法。我已经在表单上启用了keyPreview。我在下面提供了我的一些实验 有人能指出我哪里出了问题吗?我真不敢相信这样的事情会这么难。我一定错过了一些简单的东西。

我已经创建了一个用户控件,它有多个文本框、组合框等。用户控件托管在一个普通表单上。我想为文本框、组合框指定键盘快捷方式。因此,当按下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