在keydownevent中使用动态密钥

时间:2016-08-28 23:03:49

标签: c# dynamic switch-statement keydown

我正在做一个小C#程序,但它是可配置的。 Properties.Settings.Default.foobar等于F3,但可能会发生变化。最初它是这样的:

case Keys.F3:
    //dostuff
break;

但我需要Properties.Settings.Default.foobar代替F3,因为它是一个设置,因此可能会发生变化。

case Keys.Properties.Settings.Default.foobar:

显然不起作用,也没有用括号括起来,所以我不确定。我显然是C#的新手,所以有任何帮助吗?

该程序使用未聚焦的热键,但这些键是用户可配置的,所以对于一个案例我不能有任何常量/静态,对吗?

2 个答案:

答案 0 :(得分:1)

case Keys.Properties.Settings.Default.foobar:

正如你所说,这显然不起作用。具体原因是case语句的值必须是编译时常量。

更简单的if比较可能会更好。由于您的值为Keys且您的属性为string,因此您需要将一种类型转换为另一种类型进行比较。为简单起见,我会转换为字符串,或者您可以convert the string to the enum type

if (myVar.ToString() == Properties.Settings.Default.foobar)

所以没有,例如<​​/ p>

switch (myVar) {
    case Keys.F1:
        // something
    case Keys.F2:
        // something
}

你会:

if (myVar.ToString() == Properties.Settings.Default.foo) {
    // something
} else if (myVar.ToString() == Properties.Settings.Default.bar) {
    // something
}

答案 1 :(得分:0)

Keys.F3Keys枚举的值。因此,您还需要将Properties.Settings.Default.foobar字符串转换为枚举值。

幸运的是,有一种内置方法可以做到这一点:

var foobarKey = (Keys)Enum.Parse(typeof(Keys), Properties.Settings.Default.foobar);
...
if (whatever == foobarKey)
{
    ...