我試過使用KeyUp和KeyDown事件來讀取鍵盤輸入,但只要我將其他控件放在Winform上,鍵就不會被讀取。我如何確保密鑰被讀取?如何閱讀Winform上的鍵盤輸入?
回答
您可以在窗體上設置KeyPreview = true
來捕捉鍵盤事件。
EDITED,讓你明白:
接收鍵盤事件private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A)
e.SuppressKeyPress = true;
}
愚蠢的樣品,如果被壓的下降。
如果焦點位於文本框中,您會看到文字被寫入,但不是A!
再次編輯:我從VB.NET示例中獲取了此代碼。
在您的用戶控件中,使用文本框的「按鍵」事件來引發「用戶控件事件」。
該代碼將是您的自定義用戶控件:
'Declare the event
Event KeyPress(KeyAscii As Integer)
Private Sub Text1_KeyPress(KeyAscii As Integer)
RaiseEvent KeyPress(KeyAscii)
End Sub
參見:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
設置KeyPreview = true
和你KeyUp
和KeyDown
將識別所有的鍵盤輸入。
正如marco所說,在您的表單上將KeyPreview設置爲true,以捕捉整個表單中的關鍵事件而不僅僅是一個控件。
使用KeyPress事件... KeyUp/Down比您的代碼更適合框架。 KeyDown是很好的,如果你想禁用一個鍵...僅數字字段等。一般KeyPress是你所追求的。
如果您想阻止傳播到其他控件的按鍵設置KeyPressEventArgs.Handled = true。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx
你有一臺連接事件處理程序?
MyForm.KeyDown += MyHandler;
您也可以在屬性做到這一點窗格中...點擊活動圖標...
我需要上下。我想要顯示被按下的鍵,所以keyUp和keyDown都需要發生。 – Bildsoe
啊我明白了...... KeyUp/Down應該和當時一樣。你有線事件處理程序?在事件部分的屬性窗格中還是在代碼中? MyForm.KeyDown + = MyEventHandler; – iDevForFun
是的,我已經連接了事件處理程序。它的工作原理,但不是如果我把一個用戶控件放在窗體上,那麼它停止工作。 – Bildsoe
如果您正在尋找你的窗體本身讀取鍵盤輸入,你已經從你的答案其他記者。我正在添加此貢獻,因爲您可能想要將密鑰處理添加到表單上的其他控件或用戶控件。我在DevX.com發佈的文章Exploring Secrets of .NET Keystroke Handling(唉,它確實需要註冊,但它是免費的)爲您提供了全面討論如何以及爲什麼所有各種keyhandling掛鉤和事件發揮作用。此外,該文章還包含一個免費下載的「Keystroke Sandbox」實用程序,實際上可讓您查看哪些控件正在接收哪些密鑰處理事件。
以下是文章一個說明中磨你的胃口:
- 1. 閱讀輸入鍵盤
- 2. Roku:如何閱讀BrightScript中從鍵盤輸入的文本?
- 3. 如何閱讀用戶的鍵盤輸入?
- 4. 如何逐行閱讀並從鍵盤獲取輸入?
- 5. 閱讀從鍵盤輸入,無需按輸入
- 6. 如何閱讀按鍵輸入?
- 7. 從鍵盤讀取輸入
- 8. 如何同時閱讀鍵盤上的按鍵?
- 9. 如何閱讀鍵盤事件之外的鍵盤狀態?
- 10. 禁用條形碼閱讀器的iphone鍵盤輸入
- 11. OSX上的鍵盤輸入
- 12. 如何在windows鍵盤上輸入«»
- 13. 按鍵導航,按鍵盤上的事件輸入鍵盤上的輸入
- 14. 閱讀鍵盤狀態
- 15. 如何閱讀c輸入輸入
- 16. UWP訂閱鍵盤輸入事件/獲取隱藏鍵盤輸入
- 17. 如何閱讀鍵盤輸入一個字符,在一個時間與Python
- 18. 鍵盤輸入
- 19. 如何將我的鍵盤上的輸入鍵分配給JButton
- 20. 閱讀輸入
- 21. Winform鍵盤管理
- 22. 使用AdaGtk讀取鍵盤輸入
- 23. 從R鍵盤讀取輸入
- 24. 使用Scanner.nextLine()從輸入(鍵盤)讀取
- 25. Java直接從鍵盤讀取輸入
- 26. Smalltalk - 從鍵盤讀取輸入
- 27. 無法讀取鍵盤輸入(SDL_GetKeyState)
- 28. 使用cstdio讀取鍵盤輸入
- 29. LWJGL不會讀取鍵盤輸入
- 30. 無法讀取鍵盤輸入
你的意思是它爲空白表單,而不是工作是否有控制? – Yuan
是的,正如在下面的答案中所寫的,它適用於按鈕,文本框等控件,但是當我放置用戶控件時,它停止工作。 – Bildsoe
它不應該工作,鍵盤輸入轉到焦點控制。你真的*試圖做什麼? –