下記の3つの事がしたいと思っています。
⑴ Form1・Form2・Form3が開いている場合は、Form1・Form2を操作出来ない様にする
⑵ Form1・Form2が開いている場合は、Form1を操作出来ない様にする
⑶ Form1・Form3が開いている場合は、Form1を操作出来ない様にする
Form1からForm2を開き、Form2からForm3を開くと
Form3の方のPrivate Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Loadの
'オーナーフォームを取得
_frm = CType(Me.Owner, Form1)で
ハンドルされていない例外
System.InvalidCastException:'型'Form_form2.Form2'の
オブジェクトを型'form_fom2.Form1'キャストできません。'
とエラーになってしまい困っています。
どなたか教えていただけないでしょうか。宜しくお願い致します。
Windows10でvisual studio 2019 for Windows Version 16.8.6を使用
Windows フォームアプリケーション(.NET Framework) VisualBasicより
プロジェクト名 form-form2として新規作成しました。
Vb
1' Form1 2Public Class Form1 3 Private _showingForm2 As Boolean = False 4 Private _showingForm3 As Boolean = False 5 6 ' -------「Form2 Open」ボタン 7 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 8 Dim frm2 As Form2 = New Form2() 9 frm2.Owner = Me 10 frm2.Show() 11 End Sub 12 13 ' -------「Form3 Open」ボタン 14 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 15 Dim frm3 As Form3 = New Form3() 16 frm3.Owner = Me 17 frm3.Show() 18 End Sub 19 20 Public Property ShowingForm2() As Boolean 21 Get 22 Return _showingForm2 23 End Get 24 Set(ByVal value As Boolean) 25 _showingForm2 = value 26 If _showingForm3 = False And _showingForm2 = False Then 27 '子フォームのいずれも表示されていなかったら、 28 'このフォームを有効にする 29 Me.Enabled = True 30 ElseIf _showingForm3 = True Or _showingForm2 = True Then 31 '子フォームのいずれかが表示されていたら、 32 'このフォームを無効にする 33 Me.Enabled = False 34 End If 35 End Set 36 End Property 37 38 Public Property ShowingForm3() As Boolean 39 Get 40 Return _showingForm3 41 End Get 42 Set(ByVal value As Boolean) 43 _showingForm3 = value 44 '子フォームが表示されているかどうかをチェック 45 If _showingForm3 = False Then 46 '子フォームが表示されていなかったら、 47 'このフォームを有効にする 48 Me.Enabled = True 49 Else 50 '子フォームが表示されていたら、 51 'このフォームを無効にする 52 Me.Enabled = False 53 End If 54 End Set 55 End Property 56End Class 57---------------------------------------------------------------------------------------------------- 58' Form2 59Public Class Form2 60 Private _frm As Form1 61 62 Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 63 'オーナーフォームを取得 64 _frm = CType(Me.Owner, Form1) 65 'フォーム2が表示されていると設定 66 _frm.ShowingForm2 = True 67 End Sub 68 69 ' -------「Form3 Open」ボタン 70 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 71 Dim frm3 As Form3 = New Form3() 72 frm3.Owner = Me 73 frm3.Show() 74 End Sub 75 76 ' -------「Form2 Close」ボタン 77 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 78 'フォーム2が非表示になると設定 79 _frm.ShowingForm2 = False 80 Me.Close() 81 End Sub 82End Class 83---------------------------------------------------------------------------------------------------- 84' Form3 85Public Class Form3 86 Private _frm As Form1 87 88 Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load 89 'オーナーフォームを取得 90 _frm = CType(Me.Owner, Form1) 91 'フォーム3が表示されていると設定 92 _frm.ShowingForm3 = True 93 End Sub 94 95 ' -------「Form3 Close」ボタン 96 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 97 'フォーム3が非表示になると設定 98 _frm.ShowingForm3 = False 99 Me.Close() 100 End Sub 101End Class
Form1には「Form2 Open」ボタン「Form3 Open」ボタン、
Form2には「Form2 Close」ボタン「Form3 Open」ボタン、
Form3には「Form3 Close」ボタンを作成しています。
※「Form3 Open」ボタンは自作メッセージボックス表示テスト用の為、実際には使用しません。
回答1件
あなたの回答
tips
プレビュー