1

我可以使用 Control.Enter 和 Control.Leave 事件来检测用户焦点何时进入或离开控件,但这仅适用于每个表单。我在我的应用程序中使用了多个表单,并且想要跟踪哪个控件具有用户焦点,我必须使用表单的 Activated 和 Deactivated 事件来跟踪哪个表单处于活动状态,然后跟踪哪个控件聚焦在每个表单中。

我们正在使用 DockPanel 套件构建客户端,因此我们无法直接访问控件的表单。我们不能只将侦听器添加到控件的顶级表单,因为当用户停靠或取消停靠面板时,它会发生变化。但是我们仍然需要在每个应用程序的基础上跟踪焦点。如何在不访问控件表单的情况下检测每个应用程序的控件进入/离开?

4

2 回答 2

1

您能否改为挂钩到 Control.GotFocus/Control.LostFocus,然后全局跟踪当前具有焦点的控件?

将这些事件挂钩添加到每个控件将非常乏味且容易出错,因为您可能会错过感兴趣的控件。因此,如何使用Application.AddMessageFilter调用来获取应用程序中出现的每个 Windows 消息的回调。

然后您可以观看所有WM___SETFOCUSWM_KILLFOCUS调用,并记录当前控件的焦点。请记住使用方便的Control.FromHandle静态方法从您在跟踪两个窗口消息时缓存的窗口句柄中获取一个不错的 .NET 控件引用。

于 2009-02-22T13:21:16.120 回答
0

也许看看 Unity 应用程序块和控制反转 (IOC) 容器依赖注入?

http://codebetter.com/blogs/david.hayden/archive/2008/02/22/unity-ioc-screencast.aspx

于 2009-02-22T13:16:52.777 回答