代码之家  ›  专栏  ›  技术社区  ›  Not Sure

如何确定哪个控件正在吃掉我的键盘事件

  •  2
  • Not Sure  · 技术社区  · 15 年前

    在我的.NET应用程序中,我一直遇到一个特定窗体/控件的问题,我希望该窗体/控件接收到键盘事件,但实际上并没有接收到它。我对此的调试并没有超出穴居人的范围,例如在所有控件中设置断点,以及查看谁吃了不应该吃的键盘事件。一定有更好的方法-是否有工具可以帮助我跟踪键盘事件处理?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Fredrik Mörk    15 年前

    我要做的第一件事是签入properties窗口(或在designer文件中),以确保事件处理程序确实连接到事件。

        2
  •  0
  •   marr75    15 年前

    通常表单会处理按键事件。没有工具,因为它只是监视堆栈跟踪。最好的方法是在forms keypress事件中生成一个跟踪语句(添加断点并右键单击,转到“when hit”),然后查看forms.keypeventargs和sender对象中的信息。

    其他需要注意的重要事项:非字符键(包括向下翻页、向上翻页等)不会引发按键事件,它们只会引发向下翻页和向上翻页,如果设置了

    e.Handled = true;

    e.SuppressKeyPress = true;

    我也不建议使用designer/properties窗口连接事件,使用addhandler(vb)或+=(c),因为在更复杂的表单中,会有许多控件共享事件处理程序并在运行时动态指定处理程序的场景。

        3
  •  0
  •   Corillian    14 年前

    假设您使用的是完整版本的visual studio(而不是express版本或其他版本),请使用spy++。启动Spy++时,找到应用程序根窗口(Spy++有一个方便的搜索>查找窗口菜单项以提供帮助),然后右键单击Windows树状视图中的根窗口并选择消息。这将使您进入消息窗格,该窗格将开始监视该窗口的所有消息。开始键入并检查wm_keydown等。如果仍然看不到按键,请转到消息选项并选中“相同进程的窗口”。此时,您应该能够监视进程中的所有按键事件。右键单击wm_keydown(或类似)消息并转到“属性”。在属性中,应该显示处理消息的窗口的句柄,单击它将在windows树视图中高亮显示它。现在,您只需右键单击突出显示的窗口,然后选择“突出显示”以查看窗体上的控件。