
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
'-----------------------------------
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
すみません、Form1にあるのはCheckBox1でした。誤記でした。
教えて頂いたコードに修正し実行しましたら
イメージしていた通りの動きになりました。
ありがとうございました。
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
といた具合で行います
この回答への補足
早々のコメントありがとうございます。
教えて頂いたコードで試してみましたら、
oFrm2を開いて閉じた後、2回目oFrm2を開く
操作でエラーで止まってしましました。
「破棄されたオブジェクトにアクセスできません。オブジェクト名 'Form2' です。」
Application.OpenForms.Countの使い方が
よくないのかな・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
C#「オブジェクト参照が必要で...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
SetWindowsHookExで質問
-
文字列を日付に変換でParseExce...
-
SQLを連続発行する時の正しい(?...
-
VB.NET)ボックスからラベルにデ...
-
インスタンスのハンドル
-
【java】コンストラクタの処理...
-
C#のメモリ解放についてご教授...
-
javaのクラスの作り方、エラー...
-
newしないインスタンス?実体化...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
フォームの存在をチェックする方法
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
javaのクラスの作り方、エラー...
-
newしないインスタンス?実体化...
-
インスタンスを同じ名前で作成...
-
VB6.0で、DLLを動的に参照したい
-
データベースから日付型を取得...
-
C#のメモリ解放についてご教授...
-
SQLを連続発行する時の正しい(?...
おすすめ情報