我试图理解如何处理窗口及其控件和层次结构的“活动”和“聚焦”状态。
这是一个非常广泛的问题,所以这是我的实际问题来说明一点:
我有一个控件在某些情况下会调用this.Focus()。此控件显示在Infragistics下拉列表中。当控件调用this.Focus()时,在应用程序的主窗口上引发Deactivated事件,导致下拉列表关闭。如果你试图获得焦点,当然不应该发生这种情况。
我需要弄清楚是否有某种方法可以将此控件声明为主窗口的子窗口,这样主窗口就不会因为孩子想要焦点而得到“停用”。我甚至不确定这是否可能,但我找不到关于这些事件的任何文件。 (Here是您娱乐的MS文档。)
答案 0 :(得分:2)
有一条专用的窗口消息,表示窗口已激活,WM_ACTIVATE消息。它是生成Form.Activated事件的那个。 Windows仅将其发送到顶级窗口。换句话说,未嵌入较大窗口且没有父窗口的窗口。自定义下拉窗口可以类似于顶级窗口,其区别特征是它能够扩展到托管它的窗口范围之外。 ComboBox的下拉列表就是一个例子。
当您为表单提供焦点时,这会为表单生成Deactivated事件只是一个错误。他们没有给窗户正确的父母。联系Infragistics获取支持。
答案 1 :(得分:0)
我记得,激活是一种形式级别的事情,而Focus是一个控制级别,因此在应用程序中,一个表单将处于活动状态,并且该表单上的一个控件可以具有焦点。
您正在调用的控件是否是主窗体的一部分?