2009-06-17 17 views
2

在我的.Net應用程序中,我一直遇到特定窗體/控件的問題,我期望收到鍵盤事件實際上沒有收到它。我對此的調試並沒有超出穴居人的範圍,例如在我的所有控件中設置斷點,並查看誰吃了不應該有的鍵盤事件。必須有更好的方法 - 有沒有工具可以幫助我追蹤鍵盤事件處理?如何確定哪個控件正在吃我的鍵盤事件

+0

哪個鍵盤事件? – 2009-06-17 20:54:18

+0

KeyPress,KeyDown,PreviewKeyDown – 2009-06-17 20:57:07

+0

對於哪些鍵? – 2009-06-17 20:59:16

回答

0

我會做的第一件事是我會檢查屬性窗口(或在設計器文件),以確保事件處理程序確實掛鉤到事件。

0

通常,表單將處理按鍵事件。沒有工具,因爲它只是監視你的堆棧跟蹤。最好的想法是在你的表單按鍵事件中添加一個跟蹤語句(添加一個斷點和右鍵單擊,轉到「When Hit」),然後查看forms.keyeventargs和sender對象中的信息。

其他需要注意的重要事項:非字符鍵(包括下一頁,向上翻頁等)不會引發按鍵事件,它們只會引發按鍵和按鍵事件,按鍵事件會被表單「吞噬」設置

e.Handled = true;

e.SuppressKeyPress = true;

我也不建議使用設計/屬性窗口中以關聯的事件,使用的AddHandler(VB)或+ =(C#)貝科在更復雜的表單中使用時,您將擁有許多控件共享事件處理程序的場景,並在運行時動態指定處理程序。

0

假設您使用Visual Studio的完整版本(不是Express版本或其他),請使用Spy ++。當您啓動Spy ++時,找到您的應用程序根窗口(Spy ++有一個方便的搜索>查找窗口菜單項來幫助),然後右鍵單擊Windows樹視圖中的根窗口並選擇消息。這應該會引導您進入消息窗格,該窗格將開始監視窗口的所有消息。開始鍵入並檢查WM_KEYDOWN等。如果仍然沒有看到您的按鍵進入消息選項並檢查「Windows相同過程」。此時,您應該能夠監視進程中的所有按鍵事件。右鍵單擊WM_KEYDOWN(或類似的)消息並轉到屬性。在屬性中,應該顯示處理消息的窗口的句柄,然後單擊它將在Windows樹視圖中突出顯示它。現在,您只需右鍵單擊突出顯示的窗口並選擇突出顯示,即可查看窗體上的哪個控件。