Windows窗体热键比用户可以更改

时间:2018-02-16 21:18:49

标签: c# keyboard-shortcuts windows-forms-designer

最近我决定再次尝试编程(我之前有过一些Python经验,但很少)我选择了C#来玩。目前我正在尝试开发一个用户可以更改热键的应用程序,这就是我所拥有的:

void MainFormKeyDown(object sender, KeyEventArgs e){
    object altTecla = comboBox1.SelectedItem;
    object tecla = comboBox1.SelectedItem;
    if(combobox1.SelectecIndex != 0){   //Index 0 = without 'alt', 'ctrl' or 'shift'
        if (e.Modifiers == Keys.altTecla && e.KeyCode == Keys.tecla){
           //do something
        }
     } else {
        if (e.KeyCode == Keys.tecla{
           //do something
        }
     }
}

但我不能这样做:

'System.Windows.Forms.Keys' does not contain a definition for 'tecla' (CS0117)
'System.Windows.Forms.Keys' does not contain a definition for 'tecla' (CS0117)
'System.Windows.Forms.Keys' does not contain a definition for 'altTecla' (CS0117)

显然它没有认识到altTecla'和&#c; tecla'作为变量,我不知道哪种类型' altTecla'和&#c; tecla'应该是。

我尝试搜索类似的帖子,但没有。 我该怎么做才能解决这个问题? 还有,代码中的任何其他问题?我怀疑最后两个IF不起作用,但我还没有测试过。

1 个答案:

答案 0 :(得分:0)

在应用程序中使用热键的正确方法(或者至少我以前如何使用它)是导入这些函数(将这些代码行放在与属性或字段或方法相同的位置)。

[DllImport("user32.dll")] 
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
// Modifier keys codes: Alt = 1, Ctrl = 2, Shift = 4, Win = 8
// Compute the addition of each combination of the keys you want to be pressed
// ALT+CTRL = 1 + 2 = 3

然后你可以像这样使用它......

RegisterHotKey(Handle, 1, 2, (int)Keys.T);

这将使用来自调用的表单中的句柄,给出1的Id(可以有多个不同的热键,因此给出一个ID来标识每个),并将其注册为Ctrl + T.Ctrl因为第三个param是2。

如果ComboBox包含不同的键选项,最好的方法是在SelectedIndexChanged事件中注册和取消注册热键。

如果您需要任何进一步的帮助,我很乐意提供帮助。