• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NET Form1からForm2を開いたり閉じたりする方法)

VB.NETでForm1からForm2を開く方法と閉じる方法は?

このQ&Aのポイント
  • VB.NET2005でForm1にあるCheckBoxをTrueにするとform2をモードレスフォームとして開き、CheckBoxをFalseにするとform2を閉じる方法がわかりません。
  • form2の[×]で閉じた時にはForm1にあるCheckBoxをFalseにする方法がわかりません。
  • CheckBox2_CheckedChangedのコードを使用して、フォーム2の表示と非表示を制御する方法が不明です。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

Form1にあるCheckBoxがCheckBox1なのかCheckBox2なのか・・・ >Private Sub CheckBox2_CheckedChanged ・・・ >If CheckBox1.Checked = True Then ただ、vb.netでは Private Sub CheckBox2_CheckedChanged(...) Handles CheckBox1.CheckedChanged と言うのはアリで、上の場合ならCheckBox1のCheckedChangedイベントになります。 質問の・・・がどうなってるのかにもよりますが。 それと、vb2002,vb2003で必要だった(と言うかこちらが正当だという話もある) Dim Form2のインスタンス As New Form2() はいらないみたいです。 と言う訳で、Form1にあるCheckBox1からForm2と言う場合です。 Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked = True Then AddHandler Form2.FormClosed, AddressOf Form2FormClosed Form2.Show() Else Form2.Close() End If End Sub Private Sub Form2FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) CheckBox1.Checked = False End Sub

nikoniko_009
質問者

お礼

すみません、Form1にあるのはCheckBox1でした。誤記でした。 教えて頂いたコードに修正し実行しましたら イメージしていた通りの動きになりました。 ありがとうございました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Form2のインスタンスを保持する変数をクラスレベルの変数にしましょう Public Class Form1   Private oFrm2 as Form2 End Class といった具合に クラスレベルの変数としておいて Private Sub CheckBox2_CheckedChanged ・・・   Dim f_cnt As Integer   'Dim form2 As New Form2()   f_cnt = My.Application.OpenForms.Count   If CheckBox1.Checked = True Then     if oFrm2 is nothing then       'Form2 をインスタンス化する       oFrm2 = new Form2     end if     If f_cnt = 1 Then oFrm2.Show() 'モードレスフォームとして表示する   Else     oFrm2.Close() ←閉じない   End If End Sub といた具合で行います

nikoniko_009
質問者

補足

早々のコメントありがとうございます。 教えて頂いたコードで試してみましたら、 oFrm2を開いて閉じた後、2回目oFrm2を開く 操作でエラーで止まってしましました。 「破棄されたオブジェクトにアクセスできません。オブジェクト名 'Form2' です。」 Application.OpenForms.Countの使い方が よくないのかな・・・

関連するQ&A