2013-08-14 7 views
6

Menustrip私のFormに項目があり、それを押すとFormが閉じます。 MenuStrip項目「ESC」のショートカットキーを作成したいのですが、「ShorcutKey」設定ではESCのオプションがありません。「ESC」とする方法はありますか?私はMenuStripの項目に "ESC"がショートカットキーであることを示す必要があります。ESCキーのショートカットを追加できますか?

これは動作しません。こう:

menuStripItem.ShortcutKeys = Keys.Escape; 
+2

状況はどうですか? 'CancelButton'を使う方が良いかもしれません。 – Ryan

答えて

6

私はコード内

menuStripItem.ShortcutKeyDisplayString = "ESC"; 

ShortcutKeyDisplayStringを設定し、この回避策を使用することができ、これに対する直接的な解決策があるとは思いませんKeyDownESCが押された場合のフォームチェックのイベントとClose()のフォームがチェックされます。

+0

プログラムを閉じるためにESCキーを押すことができるようにするコードがあります。私がしたいのは、ショートカットキーエリアにショートカットキーがESCであるようにすることです。 – Dozer789

+0

お試しいただきありがとうございます。 – Dozer789

+1

私のコードで示したように、 'ShortcutKeyDisplayString'プロパティを' Escape'として設定することができます。ショートカットキーとしてESCを表示するだけでよい場合。 – Kurubaran

8

Winformsは、選択したショートカットキーストロークについて不安です。ファンクションキー(F1〜F12)またはKeys.ControlまたはKeys.Altのいずれかを含む別のキーでなければならないというルールです。ここでのより大きな意図は、たとえばTextBoxなどで使用される可能性のある通常のキーを誤って置き換えることができないことです。エスケープキーは通常、ダイアログのキャンセルボタンを操作します。

Keys.Escapeはかなり特殊です。 WindowsのグローバルショートカットキーであるAlt + EscapeとCtrl + Escapeは機能しません。

したがって、ShortcutKeysプロパティは使用できません。 Escキーを異なる方法で認識する必要があります。 ProcessCmdKey()メソッドをオーバーライドすることで、簡単にフォームクラスで行うことができます。このコードをフォームに貼り付けてください:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == Keys.Escape) { 
     this.Close(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+2

これはそれを閉じるために働くが、私はすでにそれのためのコードを持っています。私が必要としたのは、ショートカットキーを表示することでした。 – Dozer789

+1

@ Dozer789これを閉じるコードがある場合でも、デフォルトのコマンドキープロセスを防ぐことができるため、このコードは優れています。「ESC」は特別なコマンドキーであり、場合によっては予期せず動作することがあります。したがって、デフォルトのアクションを無効/無効にするだけでよいでしょう。 –

+0

自分のプログラムにこのコードを使用している可能性がありますが、覚えていません。私がそうでないなら、おそらくこのコードを使うつもりです。 – Dozer789

関連する問題