2011-09-21 189 views
9

在System.Windows.Forms中Keys.Control和Keys.ControlKey/Keys.Shift和Keys.ShiftKey之間的確切區別是什麼?Keys.Control/Shift和Keys.ControlKey/ShiftKey之間的確切區別是什麼?

我GOOGLE了它,但沒有具體的來了,它似乎並沒有被無論是在MSDN文檔。

就我個人而言,我總是使用Keys.Control/Keys.Shift,因爲它工作正常。


編輯:閱讀KreepN的回答後,我想如果你從來沒有使用控制/班,爲什麼他們的框架?

我的意思是,他們甚至沒有物理按鍵,所以我不明白爲什麼微軟決定創建它們的原因。

有沒有情況下最好使用Control/Shift?

+1

您可以使用Keys.Control來檢查用戶是否按住Ctrl鍵。以檢測Ctrl + C爲例。您使用Keys.ControlKey檢測用戶按Ctrl鍵。除非你寫遊戲,否則這是不尋常的。 –

回答

6

ControlKey和ShiftKey(以及菜單 - 您將假定該名稱將爲 ,名稱爲AltKey)表示物理鍵本身。換句話說,它們是 是「實際」鍵,並且可以在KeyEventArgs對象的KeyCode屬性中找到它們。

另一方面,控件,Shift和Alt將永遠不會出現在KeyCode 屬性中,但它們的值可以在KeyData屬性中找到。看起來 你從來沒有真正需要使用這些常量,因爲框架 已經通過 KeyEventArgs對象的Alt,Control和Shift屬性爲你抽出它們,但你可以使用它們來測試KeyData 屬性if你真的想要。

Source with Examples

編輯爲您編輯:

看時, 「A」 鍵後返回的值:

一個(未移動)/ 41/41

A(Shift + A鍵)/一萬○四十一分之四十一

按Ctrl + A /20041分之41

的 「邀請碼」,在這種情況下是= 41對於所有的改性劑。如果你關心的是主按鈕,在這種情況下「a」,你可以在代碼中使用它。

如果你想有,如果修改按下你需要得到更具體和參考「KEYDATA」領域,並尋找表示的某一改性劑#根據不同的功能。在這種情況下,「100」代表換檔,「200」代表在現場開始時的控制。

這並不是說你不能只檢查了「41」的KEYDATA場結束,但我從來沒有一個抱怨的便利。

這將是安全地說,「差異化」你在你的第一個問題,尋找它們之間是指向不同的屬性字段。

編輯其他相關性: 與鍵值結合使用的鍵修飾符值與捷徑枚舉成員直接相關。例如: Shortcut.CtrlF8(0x20077)與Keys.Control | Keys.F8(0x20000 | 0x77)

當處理菜單項的定義的快捷方式屬性時,這可能很有用。

+0

偉大的答案 - >接受,但增加了一個問題的一部分,並將接受一個答案,回答我的兩個問題。 – lesderid

+0

澄清和解釋,對不起回合。 – KreepN

相關問題