我想知道的东西已经很久了:
在WinForms应用程序中,您经常会有一个包含Undo和Redo等条目的编辑菜单。必须启用或禁用这些菜单条目,具体取决于具有焦点的控件以及它的撤消堆栈状态。对于此验证,您必须知道焦点何时发生变化。不幸的是,似乎没有办法在标准的C#WinForms应用程序中实现这一点。到目前为止我所做的是为每个控件添加一个OnEnter事件处理程序,但这很讨厌,不适用于后端代码添加的控件(例如在C ++ / CLI层中)。另一种方法是使用消息过滤器,但不通过这样的过滤器发送WM_FOCUS。覆盖ActiveControl也不起作用,因为它不是虚拟的。那么,还可以做些什么来验证每个焦点变化的菜单项?
注意:我已经阅读了http://msdn.microsoft.com/en-us/magazine/cc188928.aspx上的文章,但这种方法对于这么简单的任务来说很复杂。我已经有了所有验证码。我只需要在焦点转到新控件时触发它。