- 締切済み
VB.NET:モーダルで表示したフォームを最小化
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)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
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さんと同じことを自分でも考えてみたのです。 でも、そうすると、親フォームのコントロールの外観が使用不可状態になってしまいますよね・・・ 親と子のフォームサイズを連動させることが不可能ならば、親は常に最小化のままにしてしまおうか・・・とも考えています。