現在、必要なキー押下を検出できるプログラムのキー押下の組み合わせを実装してみてください (この記事では方法を説明しています) が、コードで事前に定義されているだけですが、設定を condig ファイルに保存してから、それを読み取り、押下された場合に使用したいと考えています。
それを保存し、文字列として読み取ることができるようになりました - 現在Keys
、次のコードを使用して、読み取った文字列を に変換しようとしています:
設定ファイルへの保存:
<add key="open" value="ControlKey,N"
<add key="close" value="ControlKey,Q" />
<add key="clear" value="ControlKey,D" />
<add key="settings" value="ControlKey,S" />
<add key="colorKey" value="ControlKey,K" />
<add key="fontKey" value="ShiftKey,T" />
<add key="defaultKey" value="ControlKey,P" />
そしてそれを使用して
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Keys));
string[] keyValueTemp;
keyValueTemp = cm.GetValueString("open").ToString().Split(',');
string key1 = keyValueTemp[0];
string key2 = keyValueTemp[1];
Keys keys1 = (Keys)converter.ConvertFromString(key1);
Keys keys2 = (Keys)converter.ConvertFromString(key2);
if (ModifierKeys == keys1 && e.KeyCode == keys2)
{
string keyPressed = e.KeyCode.ToString();
MessageBox.Show(keyPressed);
}
}
しかし、次の結果があります -
ご覧のとおり、これはコントロールのキーをシフトキーに変換し、コードを使用しようとしますif (ModifierKeys.ToString() == keyValueTemp[0] && e.KeyCode.ToString() == keyValueTemp[1])
が、それも機能しません。
このコードを使用する場合
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.N)
{
string keyPressed = e.KeyCode.ToString();
MessageBox.Show(keyPressed);
}
すべての作品
Q: 文字列をキーに変換して keyPressed イベントと比較するにはどうすればよいですか?
編集
だから私の間違いを見つけた
Keys key = (Keys)converter.ConvertFromString(keyValueTemp[0]);
Keys key2 = (Keys)converter.ConvertFromString(keyValueTemp[1]);
if (e.Modifiers == key && e.KeyCode == key2)
{
MessageBox.Show(e.KeyCode.ToString());
}
追加するのを忘れたe
- イベントハンドラから
別の方法 - AccessDeniedによって書かれたように
Keys key = (Keys)Enum.Parse(typeof(Keys), keyValueTemp[0], true);