種類 | 動作 |
---|---|
モーダル (modal) | 閉じられるまでは処理を戻さないため、呼び出し側の操作は制限される
モーダル ウィンドウは、メイン ウィンドウとのユーザー対話を無効にするモード (mode) を作成する Modal window - Wikipedia |
モードレス (modeless) / 非モーダル (non-modal) | すぐに処理を戻すため、呼び出し側の操作は制限されない |
public DialogResult ShowDialog()ShowDialog() - Form.ShowDialog メソッド (System.Windows.Forms) | Microsoft Learn
ShowDialog()を呼び出すと、それによって表示されたダイアログボックスが閉じられるまで、呼び出し側に制御が戻りません。
DialogResultプロパティに設定されるとフォームは非表示になり、呼び出し側に制御が戻ります。Remarks - Form.DialogResult Property (System.Windows.Forms) | Microsoft Learn
モーダルで表示されているフォームが閉じられるときにDialogResultがNoneだと、DialogResult.Cancelに設定されます。WmClose - Form.cs
引数のないShowDialog()はShowDialog(null)とするのと等しく、現在アクティブなウィンドウが所有者となります。ShowDialog() - Form.cs
using (Form form = new Form()) { if (form.ShowDialog() == DialogResult.OK) { // } }
ShowDialog()で開いたダイアログボックスは閉じられても非表示になるだけのため、不要になったら明示的にDispose()を呼び出し破棄します。
public void Show()Control.Show メソッド (System.Windows.Forms) | MSDN
Show()では呼び出し側の操作は制限されませんが、呼び出し側とは同一のスレッドで処理されます。
Form form = new Form(); form.Show();
Show()の呼び出しは、form.Visible = true
とすることと同義です。よって呼び出すフォームが内部でVisible = true
としていると、Show()を呼び出すことなく表示されます。
Ownerプロパティにダイアログボックスを開いたフォームを指定することで、その親フォームの前面に表示されるようになり、親フォームの最小化や閉じる操作に連動するようになります。Form.Owner プロパティ (System.Windows.Forms) | MSDN
Form form = new Form(); form.Owner = this; form.Show();
これはShow()の呼び出しで、form.Show(this)
のように引数で渡しても同じです。
StartPositionプロパティで設定できます。
OnFormClosing()をオーバーライドして、そこでCancelEventArgs.Cancelにtrueを設定することでダイアログが閉じられることを拒否できます。
そのとき閉じられる理由はFormClosingEventArgs.CloseReasonや、DialogResultプロパティで確認できます。
Formにはグラフィックを描画できるため、コンソール アプリケーションで利用することで図形などを表示できます。
using (Form form = new Form()) { form.Paint += delegate (object sender, PaintEventArgs e) { Point[] points = { new Point(10, 0), new Point(20, 30), new Point(0, 10), }; Graphics g = e.Graphics; g.DrawLines(Pens.Black, points); }; form.ShowDialog(); }