2011-09-21 41 views
9

System.Windows.FormsのKeys.ControlとKeys.ControlKey/Keys.ShiftとKeys.ShiftKeyの正確な違いは何ですか?Keys.Control/ShiftキーとKeys.ControlKey/ShiftKeyの正確な違いは何ですか?

私はグーグルではありますが、具体的なことは何も出てこなかったし、MSDNでもそのように書かれていないようだ。

私はKeys.Control/Keys.Shiftを個人的に使用します。なぜなら、それは正常に動作するからです。


編集:KreepNの答えを読んだ後、私はあなたがコントロール/ Shiftキーを使用する必要はありませんならば、なぜ彼らはフレームワークであると思いましたか?

つまり、物理キーでもないので、マイクロソフトがそれらを作成する理由を知りません。

Control/Shiftを使用する方がよい場合はありますか?

+1

Keys.Controlを使用して、ユーザーがCtrlキーを押したままであるかどうかを確認します。たとえば、Ctrl + Cを検出する。 Keys.ControlKeyを使用して、Ctrlキーを押しているユーザーを検出します。あなたがゲームを書くのでなければ、これは珍しいことです。 –

答えて

6

ControlKeyとShiftKey(とMenu - これはAltKeyという名前の と思われます)は、物理キー自体を表しています。つまり、 は「実際の」キーであり、KeyEventArgs オブジェクトのKeyCodeプロパティにあります。

Control、Shift、およびAltはKeyCode プロパティには表示されませんが、その値はKeyDataプロパティにあります。 フレームワーク は、KeyEventArgsオブジェクトの のAlt、Control、およびShiftプロパティを使用して既にそれらを取り出していますが、これらを使用してKeyData プロパティに対してテストすることができるため、これらの定数を実際に使用する必要はありません。あなたは本当にしたい。

Source with Examples。あなたの編集のための

編集: "" キーが押されたときに返される値で

ルック:

(シフトなし)/ 41分の41

A(Shiftキー+ )/ 10041分の41

はCtrl +/20041分の41

この場合の "キーコード" のすべての改質のために= 41です。あなたが気にしていたのがプライマリボタンが押されていれば、この場合は "a"というコードでこれを使うことができます。

モディファイアが押されたかどうかに基づいて異なる機能を使用する場合は、「KeyData」フィールドを参照して特定の修飾子を示す#を探してください。この場合、シフトのための "100"およびフィールドの始めの制御のための "200"。

KeyDataフィールドの最後に "41"が表示されているかどうかを確認できないとは限りませんが、利便性について不平を言う人はいませんでした。

最初の質問でそれらの間で探している "違い"は、異なるプロパティフィールドを参照しているということは間違いありません。

関連性の追加編集: キー値と結合されたキー変更値は、ショートカット列挙メンバに直接関連付けられます。例: Shortcut.CtrlF8(0x20077)は、Keys.Controlと同じです。 Keys.F8(0x20000 | 0x77)

メニュー項目の定義済みショートカットプロパティを扱うときに便利です。

+0

偉大な答え - >受け入れられましたが、質問に部分を追加し、両方の質問に答える回答を受け入れます。 – lesderid

+0

明確化され説明されて、ごめんなさい。 – KreepN

関連する問題