我使用的命名空間Windows.Forms.Keys翻譯Windows.forms.Keys真正本地鍵盤值
我希望能夠趕上和使用一些特殊的像喜歡E字符,è,A,C,但是當程序觸發事件KeyDown時,KeyEventArg只會將值「D1」返回給「D9」。
我能做些什麼來獲得與這些鍵相關的真正字符?
我使用的命名空間Windows.Forms.Keys翻譯Windows.forms.Keys真正本地鍵盤值
我希望能夠趕上和使用一些特殊的像喜歡E字符,è,A,C,但是當程序觸發事件KeyDown時,KeyEventArg只會將值「D1」返回給「D9」。
我能做些什麼來獲得與這些鍵相關的真正字符?
簡答題:使用KeyPress
而不是KeyDown
。
KeyDown
是真的設計用於鍵盤的物理佈局(以及物理的邏輯佈局...忘記它:D)。這與給定物理鍵表示的字符非常不同。
另一方面KeyPress
是關於從鍵盤輸入的字符,而不是真正按下的鍵。注意如何KeyPress
支持像AltGr + someKey
和焦炭等重複
如果你真的需要使用KeyDown
/KeyUp
,你將不得不效仿了Windows鍵盤系統的工作原理,確定焦炭輸出(例如,如果你的特點爲遊戲製作鍵盤映射屏幕或類似的東西)。您可以使用ToAscii WinAPI方法(https://msdn.microsoft.com/en-us/library/ms646316.aspx)。
除此之外,您還必須瞭解組合鍵的含義 - 例如,在我的鍵盤上,如果按1
,我會得到+
。如果我按Shift+1
,我得到1
。如果我按AltGr + 1
,我得到!
。你關心哪些人?也許Shift + 1
應解釋爲1
(KeyPress
做什麼)。也許它應該被解釋爲Shift + 1
(最簡單的,你已經有了)。也許它應該被解釋爲Shift + +
,它通常用於遊戲中的熱鍵綁定或鍵盤映射。
現在應該是非常明顯的,這實際上遠非微不足道。您需要一些機制來解釋「原始」輸入數據 - 不同的解釋對於不同的初始條件有不同的意義。你基本上要求在兩個明顯的選擇之間採取混合的方式 - 混合虛擬鍵和「真實」角色。
KeyDown事件與輸入的字符非常不同。例如,如果同時按下Ctrl鍵,那不是一個字符等。它與實際的物理鍵有關,與輸入框碰巧聚焦時鍵的效果可能非常不同。 –