あるフォームから別のフォームを表示し、その子フォームでの情報を親のフォームからアクセスしたい場合に、 子フォームにプロパティを持ち、それを介してデータのやり取りを行います。
以下の例では、親フォーム上のチェックボックスのチェック状態を、子フォームのチェックボックスに設定し、 子フォームを閉じた後で、子フォーム上のチェックボックスのチェック状態を親フォームに再度表示します。
以下の画像は、親のフォームでチェックボックスをONにして、子フォームを表示した様子です。
以下のソースは、子フォームの中に「チェック状態プロパティ」を宣言し、 処理的には「チェック状態退避値」に値を設定・取得しています。
フォームロード時に「チェック状態退避値」の値をフォーム上のチェックボックスに設定し、 「終了」ボタン押下時にはチェックボックスの状態を「チェック状態退避値」に退避しています。
プロパティを持つ子フォームのクラス
'''''' プロパティを持つ子フォーム ''' Public Class frmProperty 'チェック状態退避値 Private mblnChkStatus As Boolean = False '''''' チェック状態プロパティ ''' '''チェック状態の設定値 '''チェック状態を返す Public Property ChkStatus As Boolean Set(value As Boolean) mblnChkStatus = value '退避値に設定 End Set Get Return mblnChkStatus '退避値を返す End Get End Property '''''' ボタンクリックイベント ''' Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'チェックボックスの状態を退避 Me.mblnChkStatus = Me.CheckBox1.Checked '自分を閉じる Me.Close() End Sub '''''' フォームロードイベント ''' Private Sub fomProperty_Load(sender As Object, e As EventArgs) Handles Me.Load 'チェックボックスの初期状態設定 Me.CheckBox1.Checked = Me.mblnChkStatus End Sub End Class
この子フォームを呼出す親フォームの処理が以下の様になります。
子フォームを呼出す親フォームの処理
'''''' 子フォームを呼出す親フォーム ''' Public Class frmPropMain '''''' ボタンクリックイベント ''' Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'プロパティテストウインドウ生成 Dim frmProp As New frmProperty 'プロパティに自分のチェックボックスの値を設定 frmProp.ChkStatus = Me.CheckBox1.Checked 'ウインドウ表示 frmProp.ShowDialog() 'プロパティ値を自分のチェックボックスの値に設定 Me.CheckBox1.Checked = frmProp.ChkStatus 'プロパティテストウインドウ廃棄 frmProp.Dispose() frmProp = Nothing End Sub End Class
ボタンクリックイベントでは、子ウインドウのオブジェクトを生成し、 子ウインドウのプロパティに自分自身の上のチェックボックスの状態を設定し、 ダイアログウインドウとして子ウインドウを表示します。
子ウインドウの表示終了後、子ウインドウを廃棄せずにプロパティを取得し、 自分自身の上のチェックボックスの状態に設定し直しています。
ここで重要なのは、子ウインドウのオブジェクトを廃棄する前にプロパティにアクセスすることです。 子ウインドウのオブジェクトを廃棄するとアクセスは不可能になります。
関連する記事
⇒フォームの位置設定を行う処理 :[Screen.PrimaryScreen.WorkingArea]⇒フォームクラスにプロパティ宣言し外からアクセスする方法
⇒親フォームのコントロールを子フォームからアクセスする方法
⇒フォームが閉じるのをキャンセルする方法:[FormClosingEventArgs,Cancel]
⇒フォームの表示をモジュールのMain関数から行う(エントリポイントの変更)
⇒フォームがKeyDownなどのキーイベントを受取り、ファンクションキー処理をする
⇒最初のフォームActivatedイベントでの処理(1回のみしか処理しない様にする)
⇒初回のフォームActivatedイベント発生させるフォーム継承について
コメント