2014年7月8日火曜日

VB WPF お勉強 02 2画面間の呼び出し

VB WPF のお勉強 第2回 は 2画面間の呼び出し です。
Form なら Form2.Show() 一行で動くんですけど。
Window (WPF) では、ちゃんと、コンストラクタを呼び出し、
インスタンスを初期化しないと駄目みたいです。  [初心者の悪あがきぃレベル] です。.


Form の時は Form1 と Form2 とを作り、Form1 の Button1 から Form2 を呼び出すのは、
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Form2.Show()
End Sub
で、済んでいました。


同じ事を、Window(WPF) ですると、Window2.Show() に波線が現れ、
「 非共有メンバを参照するには、オブジェクト参照が必要です。 」 と怒られて、実行出来ません。

結局、この様に書く事で、実行出来る様になります。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    Dim window2 As New Window2
    window2.Show()
End Sub

この時、双方の画面には違いがあります。
Form では Form2 は1画面しか、表示されず、何回 Button1 を押しても、結果は変わりません。
Window では、Button1 を押した回数に応じて、window2 が表示されます。
                                             そりゃぁ、その書き方だから ... は ご勘弁を。

Form の時と、同じ挙動にするには、

Class Window1
    Dim window2 As Window2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        If window2 Is Nothing Then
            ShowWindow2()
        Else
            If Not window2.IsVisible Then
                ShowWindow2()
            End If
        End If
    End Sub

    Private Sub ShowWindow2()
        window2 = New Window2
        window2.Show()
    End Sub

End Class

と書かなければ。

画面設計の勝手が違う以外にも、こんな処から、Form と Window は違うのですね。


次の投稿の最後にシリーズのリンクを纏めてあります。   VB WPF お勉強 01 印象



[2015/10/25] 誤字訂正 window が windows になってた.

0 件のコメント:

コメントを投稿