GotFocus()和MDI儿童

时间:2010-07-13 20:54:39

标签: vb.net winforms focus mdi mdichild

我有一个带有3个子窗口的MDI表单。

  • MDI开始为空。

  • 每个孩子都可以从菜单中打开一次。

当我打开多个窗口并关闭顶部时,应该获得焦点,但新的活动子窗体的GotFocus()事件不会触发。

Private Sub frmMain_gotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
...
End Sub

2 个答案:

答案 0 :(得分:2)

不幸的猜测。 Enter或Activated事件将解决您的问题。

在Windows窗体编程中,您通常希望避免使用GotFocus和LostFocus事件。它们通常隐藏在设计师中,但并非始终如一。 Enter和Leave事件分别是它们的替代品,它们是从UI的逻辑状态而不是原始Windows消息生成的。使用Validating和MDI时会有所不同。

激活是“自然”的,因为实际焦点移动到该窗体的子控件。

答案 1 :(得分:0)

当您从MDI父级创建MDI子窗体时,您应该将MDI父窗体订阅到MDI子窗体的GotFocus事件。当您的MDI Child发生任何焦点事件时,您的MDI Parent将收到通知。

当表单关闭/打开时,应自动选择MDI Z-Order中的下一个子表单,如果您正在订阅该事件,则您的MDI父级可以正常操作并显示您的数据。