- ベストアンサー
【質問】プロパティでフォーム間受渡し(Disposeで破棄?)
- クラスのプロパティを宣言して、フォーム間値の受け渡しを行っていますが、呼び出された画面2を閉じる時にMe.Dispose()も行っています。そして画面2が閉じられると画面1のShowDialog以降の処理が通ると思うのですが、そもそも画面2をDisposeしたら、プロパティの値も破棄されてしまうのでは?・・・っと思っていたのですが、実際はきちんと画面1で画面2の値を取得できています。
- この辺、ガベージ・コレクタ絡みで、破棄される前に運よく取得できているだけなのかなと不安になってきました。
- 下記コードは正しいやり方なのかを含めて、ご回答よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>この辺、ガベージ・コレクタ絡みで、破棄される前に運よく取得できて >いるだけなのかなと不安になってきました。 ですね VBのバージョンが明記されていないので使用できるか分からないのですが、 VB2005からはUsingステートメントと便利なものがあります [例] VB2005でUsingステートメントを使用した場合 ・画面1 Private Sub Button3_Click・・・ Using objfrm001 As New Form1 '画面をオープン objfrm001.ShowDialog() If objfrm001.TestCode <> 0 Then TextBox1.Text = objfrm001.TestCode.ToString End If End Using End Sub ・画面2 'プロパティ宣言 Private mintTestCode As Integer = 0 Public ReadOnly Property TestCode() As Integer Get Return mintTestCode End Get End Property ・・・ mintTestCode = ComboTestCode '値をセット後呼出された画面を閉じる Me.Close() Me.Dispose() ←この行は不要です [例]VB.NET 2002/2003 の場合 ・画面1 Private Sub Button3_Click・・・ Dim objfrm001 As New Form1 '画面をオープン objfrm001.ShowDialog() If objfrm001.TestCode <> 0 Then TextBox1.Text = objfrm001.TestCode.ToString End If objfrm001.Dispose() End Sub ・画面2 'プロパティ宣言 Private mintTestCode As Integer = 0 Public ReadOnly Property TestCode() As Integer Get Return mintTestCode End Get End Property ・・・ mintTestCode = ComboTestCode '値をセット後呼出された画面を閉じる Me.Close() Me.Dispose() ←この行は不要です 子オブジェクトから値を取得する場合には子オブジェクトの破棄は親オブジェクトの仕事になります まぁ一概には言えないですが・・・
お礼
お返事ありがとうございました。 やはり運よく取得できているだけなのですね。 教えていただいたUsingのカタチで修正したいと思います。 本当にありがとうございました!