2016-08-28 3 views
0

に私は少しC#のプログラムをやっているが、それは設定可能です。 Properties.Settings.Default.foobarF3と同じですが、変更される可能性があります。もともとは、このようになるだろう:使用動的なキーkeydownevent

case Keys.F3: 
    //dostuff 
break; 

しかし、それは、このように変更されることが設定だとので、私は、F3の代わりにProperties.Settings.Default.foobarを必要としています。

case Keys.Properties.Settings.Default.foobar: 

明らかにうまくいかないし、かっこに入れていないのでわからない。私は明らかにC#の新機能ですので、どんな助けですか?

右、プログラムは、焦点の合っていないホットキーを使用しますが、これらのキーは、ユーザーが設定されているので、私はケースのための定数/静的の任意の並べ替えを持っていないことができますか?

+0

あなたは「明らかに動作しません」と言うとき、正確なエラーは何ですか? – Blorgbeard

+0

正確ではありませんが、 "プロパティ"は "キー"にありません。私は括弧がうまくいくと思うだろうが、そうは思わない。 – coltonon

+0

'foobar'には正確に何が格納されていますか? "F3"のような文字列ですか? – Blorgbeard

答えて

1
case Keys.Properties.Settings.Default.foobar: 

これは明らかに機能しません。具体的な理由は、caseステートメントの値がコンパイル時定数でなければならないということです。

単純if比較はおそらく良いだろう。あなたの値はKeysで、あなたの財産がstringあるので、あなたは比較のために、他の1つのタイプを変換する必要があります。簡単にするために文字列に変換します。またはconvert the string to the enum typeにすることができます。

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

だから代わりに、例えば、を有します

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 
} 
+0

この状況でこれをどのように使用するのかの例を追加できますか? – coltonon

+0

@coltonon私は例を追加しました。 –

+0

@coltononはまた、私は私が今まで私のコードに誤りがあったが実現:あなたは直接 'Keys.Parse'を行うことはできません。列挙型に変換するのは、それより少し複雑です。私はあなたがそのルートに行くことを望むなら、あなたはその変換をどのように行うことができるかについての答えを持っている質問にリンクしています(そして、この特定の問題ではないと思います。 –

0

Keys.F3Keys列挙の値です。したがって、Properties.Settings.Default.foobar文字列を列挙値に変換する必要があります。

は幸いにも、それを行うための組み込みの方法があります:

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

VSは私に定数が必要だと言っているので、これは機能しません。以下の答えは、あなたが他の答えは言及して、代わりに '' case'のif'を使用する必要があります、 – coltonon

+0

ああ...それによりを追加するようです。編集されました。 – Blorgbeard

関連する問題