Windows アプリケーションで画面遷移をしてみよう(その1)

Windows アプリケーションの画面遷移をやってみましょう。
画面遷移で一番簡単な方法ですが、メニューのフォームから、違う画面を表示してみます。
※解説に用いた Visual Studio 2005 の Edition は、Team System Edition です。
サンプルのダウンロード

このカテゴリーの先頭へ このページの先頭へ

■プロジェクトの作成

プロジェクトの作成についてはWindows アプリケーションを作ってみようと 全く同じなのでここでは割愛します。
※今回は、プロジェクト名を MyWinApp02 としました。

このカテゴリーの先頭へ このページの先頭へ

■フォームの追加

ソリューションエクスプローラ(IDE 上に無い人は、メニューバーの[表示]→[ソリューション エクスプローラ]で表示させてくださいね)で、
プロジェクトを選択して、右クリックします。
下図のようなコンテキストメニューが表示されます。
winFormChange01_001
[追加]→[Windows フォーム]をクリックします。
winFormChange01_002
ファイル名は任意で入力して[OK]を押下して下さい。私はファイル名を ChildForm.vb としました。

ついでに、Form1 の名前もそのままだとメニュー画面である事が解りにくいので、
MenuForm.vb にします。
ソリューションエクスプローラで、Form1 を選択し、右クリックして[プロパティ]をクリックして下さい。
↓のプロパティウィンドウが出現します。
winFormChange01_003
ファイル名に、MenuForm.vb と入力して、Enter キーを押下します。
メニューバーの[ツール]→[オプション]→[プロジェクト及びソリューション]の
[ファイル名の変更時にシンボルの名前変更を確認]にチェックが入っている場合、以下のメッセージが現れます。
winFormChange01_004
[はい]ボタンを押下します。

最終的にはこんな感じになってれば OK です。
winFormChange01_005

Visual Studio では、ファイル名=クラス名である必要はありません。
別名で管理する事が可能です。上記のメッセージが出ない設定・もしくは上記メッセージで
[いいえ]を選択した場合には、MainForm.vb というファイルの中に、Form1 というクラスが存在する事になります。
もし、後でファイル名と同じにしたくなった場合は、コードビュー上でクラス名を変更する必要があります。
ファイル名≠クラス名だと解りにくいし、変えたくなった時に面倒なので、
できれば[ファイル名の変更時にシンボルの名前変更を確認]にチェックを入れておく事をお勧めします。

このカテゴリーの先頭へ このページの先頭へ

■コントロールの配置

フォームの追加で追加したフォームに、コントロールを配置します。
コントロールの配置の仕方については、Windows アプリケーションを作ってみようとほぼ同じなので割愛します。
このような感じでコントロールを配置して下さい。

MenuForm
winFormChange01_006
ChildForm
winFormChange01_007

このカテゴリーの先頭へ このページの先頭へ

■コードを入力

ChildForm を デザイナ上または、ソリューションエクスプローラ上で、[コードの表示]をクリックし、
コードビューに切り替えてください。
以下のコードを入力します。

ChildForm.vb
Public Class ChildForm
    Private m_inputedName As String

    Public WriteOnly Property InputedName() As String
        Set(ByVal value As String)
            Me.m_inputedName = value
        End Set
    End Property

    Private Sub ChildForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' MenuForm から 渡された値を Label に表示
        Me.Label1.Text = Me.m_inputedName + "さん、こんにちは!"
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Close()
    End Sub
End Class
ChildForm 同様、MenuForm にも以下のコードを入力します。
MenuForm.vb
Public Class MenuForm

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim inputedString As String = Me.TextBox1.Text

        ' 入力されていなかった時はエラーメッセージを出力して処理終了
        If inputedString = "" Then
            MessageBox.Show("お名前をテキストボックスに入力して下さい", _
                            Me.Text, _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Warning)
            Me.TextBox1.Focus()
            Return
        End If

        ' 入力されていた時は ChildForm を モーダル表示
        Dim myChild As ChildForm
        Try
            myChild = New ChildForm
            myChild.InputedName = inputedString
            myChild.ShowDialog(Me)
        Finally
            If myChild IsNot Nothing Then myChild.Dispose()
        End Try
    End Sub
End Class
このカテゴリーの先頭へ このページの先頭へ

■実行しよう!

さぁ、コードの入力も終わったし、実行...ちょっと待って下さい。
プログラムが開始された時に、一番最初に表示するフォームが MenuForm である事を確認します。
ソリューションエクスプローラで、[My Project]という項目があると思います。
そいつをダブルクリックして下さい。
winFormChange01_008
注意すべき点は、[アプリケーション]タブの[スタートアップフォーム]です。
MenuForm になっていますか?
もし、なっていなければ DropDownList より選択して MenuForm にして下さい。
確認及び変更が終わったら、メニューバーの[ファイル]→[Form1.vb の保存]で、保存しましょう。

メニューバーの[デバッグ]→[デバッグ実行]をクリックして実行します。
↓こんな画面が出現しましたか?
winFormChange01_009
TextBox に自分の名前などを入力して、Button をクリックしてみましょう。
ポップアップで、ChildForm が出現します。ちゃんと MenuForm で入力した値が表示されたでしょうか?
winFormChange01_010

うまくいったら、今度はコントロールを変えたり、メッセージを変えたりして
色々遊んでみてください。

このカテゴリーの先頭へ このページの先頭へ

■参考資料

Form クラス
TextBox クラス
Property ステートメント