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イベントはそれらの代わりであり、生のWindowsメッセージではなくUIの論理状態から生成されます。検証とMDIを使用すると違いが生じます。
実際のフォーカスがそのフォームの子コントロールに移動するため、アクティブ化は「自然な」ものです。
MDI親からMDI子フォームを作成する場合は、MDI親フォームをMDI子フォームのGotFocusイベントにサブスクライブする必要があります。MDI子でフォーカスイベントが発生すると、MDI親に通知されます。
フォームを閉じる/開くと、MDI Zオーダーの次の子フォームが自動的に選択されます。イベントをサブスクライブしている場合は、MDIの親が適切に行動してデータを表示できます。