【问题标题】:How do focus and activation of controls relate?控件的焦点和激活如何关联?
【发布时间】:2013-08-13 14:36:02
【问题描述】:

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

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

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

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

【问题讨论】:

标签: winforms focus infragistics


【解决方案1】:

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

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

【讨论】:

  • 那么activate和focus是什么关系呢?顶级窗口获得 WM_ACTIVATE 并且某些控件获得焦点?
【解决方案2】:

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

您调用的控件是否位于主窗体的一部分上?

【讨论】:

  • “主窗体的一部分”的定义是什么?对不起,如果这是一个愚蠢的问题。 :)
  • 没关系,我不是很清楚;你能解释一下申请表中的表格吗?是否只有一个表单,或者您是否对在两个不同表单上发生的事件有问题?
  • 有多个表单,想要获得焦点的表单是一个在主窗口的子窗口 datagridview 中弹出的控件。 (Infragistics 对接管理器子窗口)
  • 我同意 Hans 的观点,闻起来像是 Infragistics 基础设施的问题,所以试试看
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多