• 締切済み

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)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。

みんなの回答

回答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

choco1110
質問者

お礼

回答ありがとうございます。 実は、1050YENさんと同じことを自分でも考えてみたのです。 でも、そうすると、親フォームのコントロールの外観が使用不可状態になってしまいますよね・・・ 親と子のフォームサイズを連動させることが不可能ならば、親は常に最小化のままにしてしまおうか・・・とも考えています。