業務アプリにありがちな、シングルウインドウで画面展開していき、子画面を閉じると親画面が表示される系の実装例。いわゆるパンくずリスト。(まあ以下の実装はリスト表示ではないので、正確にはパンくずリストではないですが)
具体的には、次の画面を .show した後に、次の画面の .Owner に親画面のインスタンスを突っ込んでおきます。
その後、親画面は .Hide で非表示にします。
子画面が閉じられたときは、.Owner を .show してやれば親画面の表示が戻ります。
.Owner の Nothing を確認しているのは、ルートウインドウは親要素がセットされていないため。
Class MainWindow Private Shared _count As Integer = 0 Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded _count += 1 Me.Title = CStr(_count) ' いつ作った Window なのかを確認するための、デバッグ情報。 End Sub ' 子画面を開く Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim f = New MainWindow f.Show() f.Owner = Me Me.Hide() End Sub ' 画面を閉じる Private Sub MainWindow_Closed(sender As Object, e As EventArgs) Handles Me.Closed If (Me.Owner Is Nothing) = False Then ' ルートウインドウではないなら Me.Owner.Show() End If End Sub End Class
上記はテストプログラムなので、Title に生成した Windows 番号(_count) を表示して、いつ作成したかわかるようにしています。
また、本来は複数のウインドウで呼び合いますが、枚数作るのは面倒だったので、再帰でサンプルを作っています。