
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
クリックイベントなのに、2回ク...
-
VBAでユーザーフォームを再表示...
-
ユーザーフォーム上に現在日時...
-
テキストボックス入力データの...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームのテキストボ...
-
MDIフォームでのモーダル
-
アクセス 別フォームの関数の...
-
[VB6.0]フォーム上に配置したコ...
-
VBAのテキストフォームの折り返...
-
EXCEL VBA ユーザーフォームの...
-
テキストボックスの番号の取得
-
Excelにて、ユーザーフォームで...
-
コントロールの存在確認
-
フォームを同期的に
-
ユーザーフォームのコピー?
-
起動時の表示したいフォームの選択
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームのテキストボ...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
エクセルのチェックボックスの...
-
エクセルVBAのフォームを最...
-
VB.NETでフォームロード中のエ...
-
EXCEL VBA ユーザーフォームの...
-
VBA(エクセル)のユーザー...
-
【Excel VBA】ユーザフォームを...
-
Hideについて(.NET)
-
(Excel+VBA)ユーザーフォームの...
-
モーダルフォームとモードレス...
-
VBA コンボボックスとテキスト...
-
アクセス2013 フォームが...
おすすめ情報