在我的.Net应用程序中,我一直遇到特定表单/控件的问题,我希望收到的键盘事件实际上并没有收到它。我对此的调试并没有超过穴居人的进展,例如在我的所有控件中设置断点,以及看谁吃了不应该有的键盘事件。必须有更好的方法 - 是否有工具可以帮助我跟踪键盘事件处理?
答案 0 :(得分:0)
我要做的第一件事是我会检查“属性”窗口(或在Designer文件中)以确保事件处理程序确实已连接到事件。
答案 1 :(得分:0)
通常表单会处理按键事件。没有工具,因为它只是监控堆栈跟踪。最好的想法是在表单按键事件中创建一个跟踪语句(添加断点并右键单击,转到“When Hit”),然后查看forms.keyeventargs和sender对象中的信息。
要注意的其他重要事项:非字符键(包括向下翻页,向上翻页等)不会引发按键事件,它们只会引发keydown和keyup,如果设置了按键事件则会被表单“吞噬”
e.Handled = true;
或
e.SuppressKeyPress = true;
我也不建议使用设计器/属性窗口来连接事件,使用Addhandler(VB)或+ =(C#),因为在更复杂的表单中,您将拥有许多控件共享事件处理程序的场景,并且动态在运行时指定处理程序。
答案 2 :(得分:0)
假设您使用的是完整版Visual Studio(不是Express版或其他任何版本),请使用Spy ++。当你启动Spy ++时,找到你的应用程序根窗口(Spy ++有一个方便的Search> Find Window菜单项来帮助),然后右键单击Windows树视图中的根窗口并选择Messages。这会将您带到消息窗格,该窗格将开始监视窗口的所有消息。开始输入并检查WM_KEYDOWN等。如果仍然没有看到按键,请转到消息选项并选中“同一进程的Windows”。此时,您应该能够监控流程中的所有按键事件。右键单击WM_KEYDOWN(或类似)消息并转到属性。在属性中,应显示处理消息的窗口的句柄,单击它将在Windows树视图中突出显示它。现在,您只需右键单击突出显示的窗口,然后选择突出显示以查看表单上的控件。