• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プロパティでフォーム間受渡し(Disposeで破棄?))

【質問】プロパティでフォーム間受渡し(Disposeで破棄?)

このQ&Aのポイント
  • クラスのプロパティを宣言して、フォーム間値の受け渡しを行っていますが、呼び出された画面2を閉じる時にMe.Dispose()も行っています。そして画面2が閉じられると画面1のShowDialog以降の処理が通ると思うのですが、そもそも画面2をDisposeしたら、プロパティの値も破棄されてしまうのでは?・・・っと思っていたのですが、実際はきちんと画面1で画面2の値を取得できています。
  • この辺、ガベージ・コレクタ絡みで、破棄される前に運よく取得できているだけなのかなと不安になってきました。
  • 下記コードは正しいやり方なのかを含めて、ご回答よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.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() ←この行は不要です 子オブジェクトから値を取得する場合には子オブジェクトの破棄は親オブジェクトの仕事になります まぁ一概には言えないですが・・・

mttk1238
質問者

お礼

お返事ありがとうございました。 やはり運よく取得できているだけなのですね。 教えていただいたUsingのカタチで修正したいと思います。 本当にありがとうございました!

関連するQ&A