プロが教える店舗&オフィスのセキュリティ対策術

VB.NET2005でForm1にあるCheckBoxをTrueにするとform2をモードレスフォームとして開き、CheckBoxをFalseにするとform2を閉じる方法がわかりません。また、form2の[×]で閉じた時にはForm1にあるCheckBoxをFalseにする方法がわかりません。
'-----------------------------------
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 f_cnt = 1 Then form1.Show() 'モードレスフォームとして表示する
  Else
   form2.Close() ←閉じない
  End If
End Sub
'-----------------------------------

A 回答 (2件)

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
といた具合で行います

この回答への補足

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

補足日時:2008/08/20 08:02
    • good
    • 0

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
    • good
    • 0
この回答へのお礼

すみません、Form1にあるのはCheckBox1でした。誤記でした。

教えて頂いたコードに修正し実行しましたら
イメージしていた通りの動きになりました。
ありがとうございました。

お礼日時:2008/08/20 07:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!