
Form2をForm1の所有として、モーダルで表示しました。
'------------------------
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChildMdl.Click
'Form2を開く
Dim frmN As New Form2
frmN.ShowDialog(Me) 'MeはForm1
End Sub
'------------------------
Form2が最小化された時に、親フォームであるForm1も最小化させたいと思い、
Form2のResizeメソッドに以下のようなコードを書きました。
'------------------------
Private Sub Form2_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Select Case Me.WindowState
Case FormWindowState.Minimized
'親フォームも最小化((1))
Me.Owner.WindowState = FormWindowState.Minimized
Case FormWindowState.Maximized
'親フォームも最大化((2))
Me.Owner.WindowState = FormWindowState.Maximized
Case FormWindowState.Normal
'親フォームも通常サイズ((3))
Me.Owner.WindowState = FormWindowState.Normal
End Select
End Sub
'------------------------
しかし、(2)、(3)は問題なく実行できるのですが、
(1)を実行すると、自フォーム(Form2)が閉じてしまうのです。
そういう仕様なのでしょうか?
ご存知の方、教えてください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ShowDialogの仕様かどうかは知らないけど、やってみたら、勝手に「閉じるイベント」が発生しました。
しっかり調べてないのでわからないけど、「仕様」と判断しちゃいました。
そこで
「ShowDialog」
っぽい動きを作成しました。
ShowDialogで実現できないときに、参考になれば幸いです。
'-----------------------------------------------
'イベント/クリック[cmdChildMdl]
Private Sub cmdChildMdl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChildMdl.Click
'Form2を開く
Dim frmN As New Form2()
'親子の縁組
Me.AddOwnedForm(frmN)
'普通に表示
frmN.Show()
'自分を操作させないために、使用不可能
Me.Enabled = False
End Sub
'-----------------------------------------------
'イベント/サイズ変更時
Private Sub Form2_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
'親と子のWindowStateの同期
Me.Owner.WindowState = WindowState
'操作不能に陥らないように、最小化時は、親を使用可能状態にする
Me.Owner.Enabled = (WindowState = FormWindowState.Minimized)
End Sub
'イベント/閉じる時
Private Sub Form2_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
'親を使用可能状態
Me.Owner.Enabled = True
'親子の離縁
Me.Owner.RemoveOwnedForm(Me)
End Sub
回答ありがとうございます。
実は、1050YENさんと同じことを自分でも考えてみたのです。
でも、そうすると、親フォームのコントロールの外観が使用不可状態になってしまいますよね・・・
親と子のフォームサイズを連動させることが不可能ならば、親は常に最小化のままにしてしまおうか・・・とも考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VB.NETでフォームロード中のエ...
-
Microsoft Formsの「個人情報や...
-
ACCESSのフォーム、開くんです...
-
VBAでユーザーフォームを再表示...
-
(Excel+VBA)ユーザーフォームの...
-
ユーザーフォーム上に現在日時...
-
ユーザーフォームのラベルに時...
-
複数のフォームを1つのフォー...
-
C# フォームのShow()をオーバー...
-
エクセルのチェックボックスの...
-
【VBAユーザーフォームで閉じる...
-
フォームを画面の下側ぴったり...
-
オブジェクト(コントロール)...
-
Current、Openがそれぞれ2回発...
-
VB.NETでフォーム間でのコント...
-
パソコンの画面に合わせてユー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Microsoft Formsの「個人情報や...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
クリックイベントなのに、2回ク...
-
ユーザーフォーム上に現在日時...
-
テキストボックス入力データの...
-
VBAのテキストフォームの折り返...
-
ACCESSのフォーム、開くんです...
-
Hideについて(.NET)
-
ユーザーフォームのテキストボ...
-
エクセルVBAのフォームを最...
-
モーダルフォームとモードレス...
-
EXCEL VBA ユーザーフォームの...
-
フォームのテキストボックスな...
-
コントロールの存在確認
-
パソコンの画面に合わせてユー...
-
フォームウィンドウを最前面に...
-
Accessで、一つのフォーム画面...
おすすめ情報