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.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の使い方が
よくないのかな・・・
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でした。誤記でした。
教えて頂いたコードに修正し実行しましたら
イメージしていた通りの動きになりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
変数名の付け方
-
VB.NET getとsetの概念がわかり...
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
抽象クラスのインスタンス生成...
-
オブジェクト参照がオブジェク...
-
他のファイルの変数参照
-
クラス型がインスタンス化され...
-
エクセル(複数インスタンス)...
-
C#において、同じインスタンス...
-
VB6.0のクラスで、自分自身のイ...
-
マルチスレッドでのインスタン...
-
文字列を日付に変換でParseExce...
-
String型もしくはint型をIntege...
-
VC#での24ビットbmp形式での保...
-
newしないインスタンス?実体化...
-
生成したインスタンスを削除す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報