0

我试图了解如何为窗口及其控件及其层次结构处理“活动”和“聚焦”状态。

这是一个非常广泛的问题,所以这里是我的实际问题来说明一下:

在某些情况下,我有一个调用 this.Focus() 的控件。此控件显示在 Infragistics 下拉列表中。当控件调用 this.Focus() 时,会在应用程序的主窗口上引发 Deactivated 事件,从而导致下拉菜单关闭。如果你试图集中注意力,这当然不应该发生。

我需要弄清楚是否有某种方法可以将此控件声明为主窗口的子窗口,以便主窗口不会仅仅因为孩子想要焦点而被“停用”。不过,我什至不确定这是否可行,而且我找不到有关这些事件的任何文档。(是供您娱乐的 MS 文档。)

4

2 回答 2

2

有一个专用的 Window 消息表示窗口已激活,即 WM_ACTIVATE 消息。它是生成 Form.Activated 事件的那个。Windows 仅将其发送到顶级窗口。换句话说,没有嵌入更大窗口并且没有父窗口的窗口。自定义下拉窗口可以类似于顶级窗口,其显着特征是它能够扩展到其所在窗口的边界之外。ComboBox 的下拉列表就是一个示例。

当您将焦点放在表单上时,这会为表单生成 Deactivated 事件,这只是一个错误。他们没有给窗口正确的父级。联系 Infragistics 以获得支持。

于 2013-08-13T15:59:28.523 回答
0

我记得,激活是表单级别的东西,而焦点是控件级别的东西,因此在应用程序中,一个表单将处于活动状态,并且该表单上的一个控件可以具有焦点。

您正在调用的控件是否集中在主窗体的一部分上?

于 2013-08-13T15:05:10.640 回答