【问题标题】:GotFocus() and MDI ChildrenGotFocus() 和 MDI 儿童
【发布时间】:2010-07-13 20:54:38
【问题描述】:
我有一个带有 3 个子窗口的 MDI 表单。
MDI 开始为空。
每个孩子都可以从菜单中打开一次。
当我打开多个窗口并关闭顶部的窗口时,应该获得焦点,但新的活动子窗体的 GotFocus() 事件没有触发。
Private Sub frmMain_gotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
...
End Sub
【问题讨论】:
标签:
vb.net
winforms
focus
mdi
mdichild
【解决方案1】:
倒霉的猜测。 Enter 或 Activated 事件都可以解决您的问题。
在 Windows 窗体编程中,您通常希望避免 GotFocus 和 LostFocus 事件。它们通常隐藏在设计器中,但并非始终如一。 Enter 和 Leave 事件分别是它们的替代品,它们是从 UI 的逻辑状态而不是原始 Windows 消息生成的。使用验证和 MDI 时会有所不同。
Activated 是“自然”的,因为实际焦点移动到该表单的子控件。
【解决方案2】:
当您从 MDI 父窗体创建 MDI 子窗体时,您应该为 MDI 父窗体订阅 MDI 子窗体的 GotFocus 事件。当您的 MDI Child 发生任何焦点事件时,您的 MDI Parent 会收到通知。
关闭/打开表单时,应自动选择 MDI Z-Order 中的下一个子表单,如果您订阅了该事件,您的 MDI 父级可以适当地采取行动并显示您的数据。