c# - 用于按下按钮问题的 C# 可调热键功能
问题描述
我创建了一个热键功能 atm,以便用户可以根据自己的需要调整键绑定,然后我设置键并且它们不可调整。这是我以前用过的。
public void gHook_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.D:
// stuff
Salvagebtn.PerformClick();
break;
case Keys.F12:
// stuff
pausebtn.PerformClick();
break;
case Keys.K:
//stuff
Geardropbtn.PerformClick();
break;
case Keys.F:
//stuff
Gamblebtn.PerformClick();
break;
case Keys.A:
//stuff
LeftClickSpambtn.PerformClick();
break;
case Keys.H:
// stuff
openGRbtn.PerformClick();
break;
case Keys.B:
//stuff
gemupbtn.PerformClick();
break;
}
}
现在我做了一个设置选项卡,在那里 ppl 可以更改看起来像这样的键绑定。
我怎样才能让它而不是“case Keys.D:”它将对文本框中的键绑定做出反应?
解决方案
有几种方法可以做到。您可以采用的一种方法是将键绑定分配给 Dictionary 其中 UserActions 是定义可能操作的枚举:
public enum UserAction
{
Salvage, Pause, Drop // etc...
}
然后当用户按下一个键时,类似于:
public void gHook_KeyDown(object sender, KeyEventArgs e)
{
string k = e.KeyCode.ToString();
if (KeyBindings.Contains(k)) //KeyBindings is your field or variable which is a Dictionary<string, UserAction>
{
var action = KeyBindings[k]
switch (action)
{
case UserAction.Salvage:
// stuff
Salvagebtn.PerformClick();
break;
case UserAction.Pause:
// stuff
pausebtn.PerformClick();
break;
// and so on...
给字典赋值:
var KeyBindings = new Dictionary<string, UserAction>;
KeyBindings["D"] = UserAction.Salvage;
KeyBindings["A"] = UserAction.Pause;
如果需要从用户输入中获取密钥,可以使用 Enum.TryParse(input):
Keys key;
if (Enum.TryParse<Keys>(textBoxSalvage.Text, out key))
{
KeyBinding[textBoxSalvage.Text] = UserAction.Salvage; // note that 'UserAction.something' comes from the context
}
推荐阅读
- android - 在 Kotlin 中使用 API 端点
- r - R:如何在 R 中的两个重复项之间包含一个字符?
- common-lisp - 在 SBCL 中为自定义散列表定义散列函数
- bash - Bash脚本如何将数组元素与字符串进行比较
- geolocation - 使用python和谷歌地图API的坐标之间的地理编码距离
- python - TensorFlow 新手并尝试将新数据集 (oxford_flowers102) 添加到 TensorFlow,但未成功
- c - 从 1 到 N 的丰富数的计数
- php - 2021 年是否有支持 php 和 Azure 应用洞察的故事?
- task - TaskJuggler 不会在具有修复结束日期的任务之前执行并产生错误
- sql - 修改 WITH CTE AS 语句