最近我决定再次尝试编程(我之前有过一些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不起作用,但我还没有测试过。
答案 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事件中注册和取消注册热键。
如果您需要任何进一步的帮助,我很乐意提供帮助。