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