C#のShowDialogとは?ShowDialogメソッドを利用しよう

- システム
エンジニア - フォームを閉じさせなくすることもできるのですね。
- プロジェクト
マネージャー - そうですね。閉じるボタンを非表示にすることもできますよ。
C#のShowDialogについて
今回は、C#のShowDialogについて説明します。ShowDialogメソッドを利用することで、モーダルダイアログとして呼び出せます。戻り値の取得や、データやり取りもできます。
C#のShowDialogに興味のある方はぜひご覧ください。
基本的な使い方
C#のShowDialogメソッドを利用することで、モーダルダイアログとして呼び出せます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button; public Form1() { // buttonの設定 button = new Button() { Text = "Dialog1", Location = new Point(20, 20), }; // イベントハンドラの設定 button.Click += new EventHandler(button_Click); // ボタンをFormに追加 this.Controls.Add(button); // Formテキストの設定 this.Text = "Form1"; } void button_Click(object sender, EventArgs e) { Dialog1 dialog1 = new Dialog1(); // モーダルダイアログとして表示 dialog1.ShowDialog(); } } // ダイアログボックス class Dialog1 : Form { public Dialog1() { // ダイアログのテキスト設定 this.Text = "Dialog1"; } } } |
実行すると、Formに「Dialog1」ボタンが表示されます。「Dialog1」ボタンをクリックすると、ShowDialogメソッドでモーダルダイアログとして表示されます。
モーダルダイアログなので、ダイアログを閉じなければ、Formをアクティブにできません。
また、モーダルダイアログを開くと、タスクバーに2つ表示されていることが分かります。モーダルダイアログは「タスクバーに表示しない」「最大化・最小化させない」のが一般的です。
以下のような設定にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public Dialog1() { // ダイアログのテキスト設定 this.Text = "Dialog1"; // ダイアログボックス用の設定 this.MaximizeBox = false; // 最大化ボタンを表示しない this.MinimizeBox = false; // 最小化ボタンを表示しない this.ShowInTaskbar = false; // タスクバーに表示しない } |
フォームを閉じる
C#のフォームを閉じるには、Form.Close メソッドを使います。
1 2 3 |
this.Close(); |
ShowDialogメソッドで表示したモーダルダイアログは、Closeメソッドを呼び出してもフォームのリソースは解放されません。
リソースを解放するためには、Disposeメソッドを呼び出す必要があります。
フォームの位置
C#のフォームを画面の中央や、指定した位置等に表示する方法を紹介します。
呼び出し側でモーダルダイアログの位置を設定するには、以下のようにします。画面の中央にダイアログを表示するサンプルです。
1 2 3 4 5 6 7 8 |
void button_Click(object sender, EventArgs e) { Dialog1 dialog1 = new Dialog1(); dialog1.StartPosition = FormStartPosition.CenterScreen; dialog1.ShowDialog(); // モーダルダイアログとして表示 } |
以下は、画面の任意の位置にダイアログを表示するサンプルです。
1 2 3 4 5 6 7 8 9 10 |
void button_Click(object sender, EventArgs e) { Dialog1 dialog1 = new Dialog1(); dialog1.Left = 200; dialog1.Top = 200; dialog1.StartPosition = FormStartPosition.Manual; dialog1.ShowDialog(); // モーダルダイアログとして表示 } |
呼び出されたダイアログ側でも位置を設定できます。
例えば、以下のように設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public Dialog1() { // ダイアログのテキスト設定 this.Text = "Dialog1"; // ダイアログボックス用の設定 this.MaximizeBox = false; // 最大化ボタンを表示しない this.MinimizeBox = false; // 最小化ボタンを表示しない this.ShowInTaskbar = false; // タスクバーに表示しない // 表示位置の設定 this.StartPosition = FormStartPosition.CenterParent; // 親フォームの中央に配置 } |
このように、呼び出す側・呼び出される側どちらでも表示位置を指定できます。
戻り値の取得
C#のモーダルダイアログの戻り値を取得できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button; Label label; public Form1() { // buttonの設定 button = new Button() { Text = "Dialog1", Location = new Point(20, 20), }; // イベントハンドラの設定 button.Click += new EventHandler(button_Click); this.Controls.Add(button); // labelの設定 label = new Label() { Location = new Point(20, 60), }; this.Controls.Add(label); this.Text = "Form1"; } void button_Click(object sender, EventArgs e) { Dialog1 dialog1 = new Dialog1(); // 戻り値を取得 DialogResult dr = dialog1.ShowDialog(); // 取得した戻り値の表示 label.Text = Enum.GetName(typeof(DialogResult), dr); } } // ダイアログボックス class Dialog1 : Form { public Dialog1() { this.Text = "Dialog1"; // ダイアログボックス用の設定 this.MaximizeBox = false; // 最大化ボタン this.MinimizeBox = false; // 最小化ボタン this.ShowInTaskbar = false; // タスクバー上に表示 this.StartPosition = FormStartPosition.CenterParent; // 親フォームの中央に配置 Button buttonOK = new Button() { Text = "OK", Location = new Point(20, 20), }; buttonOK.Click += new EventHandler(buttonOK_Click); this.Controls.Add(buttonOK); Button buttonCancel = new Button() { Text = "Cancel", Location = new Point(100, 20), }; buttonCancel.Click += new EventHandler(buttonCancel_Click); this.Controls.Add(buttonCancel); } void buttonOK_Click(object sender, EventArgs e) { // OKボタンが押された時はDialogResult.OKを設定する。 this.DialogResult = DialogResult.OK; // ダイアログを閉じる this.Close(); } void buttonCancel_Click(object sender, EventArgs e) { // Canselボタンが押された時はDialogResult.Cancelを設定する。 this.DialogResult = DialogResult.Cancel; // ダイアログを閉じる this.Close(); } } } |
OKボタン・Cancelボタンクリック時に戻り値を設定し、呼び出し側で取得します。戻り値がlabelに表示されていることが分かります。
呼び出したダイアログとフォーム間でのデータやり取り
C#のモーダルダイアログから戻り値を返却するだけでなく、データのやり取りもできます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { Button button; Label label; public Form1() { button = new Button() { Text = "Dialog1", Location = new Point(20, 20), }; button.Click += new EventHandler(button_Click); this.Controls.Add(button); label = new Label() { Location = new Point(20, 60), }; this.Controls.Add(label); this.Text = "Form1"; } void button_Click(object sender, EventArgs e) { Dialog1 dialog1 = new Dialog1(); DialogResult dr = dialog1.ShowDialog(); //label.Text = Enum.GetName(typeof(DialogResult), dr); // 値を取得する label.Text = dialog1.value; } } // ダイアログボックス class Dialog1 : Form { public string value { get; set; } public Dialog1() { this.Text = "Dialog1"; // ダイアログボックス用の設定 this.MaximizeBox = false; // 最大化ボタン this.MinimizeBox = false; // 最小化ボタン this.ShowInTaskbar = false; // タスクバー上に表示 this.StartPosition = FormStartPosition.CenterParent; // 親フォームの中央に配置 Button buttonOK = new Button() { Text = "OK", Location = new Point(20, 20), }; buttonOK.Click += new EventHandler(buttonOK_Click); this.Controls.Add(buttonOK); Button buttonCancel = new Button() { Text = "Cancel", Location = new Point(100, 20), }; buttonCancel.Click += new EventHandler(buttonCancel_Click); this.Controls.Add(buttonCancel); } void buttonOK_Click(object sender, EventArgs e) { // OKボタンが押された時はDialogResult.OKを設定する。 this.DialogResult = DialogResult.OK; // 値を設定する value = "hoge"; // ダイアログを閉じる this.Close(); } void buttonCancel_Click(object sender, EventArgs e) { // Cancelボタンが押された時はDialogResult.Cancelを設定する。 this.DialogResult = DialogResult.Cancel; // 値を設定する value = "piyo"; // ダイアログを閉じる this.Close(); } } } |
モーダルダイアログのOKボタン・Cancelボタンクリック時に、戻り値だけでなく、データも設定しています。
呼び出し側で設定したデータを取得し、labelに表示されていることが分かります。
- システム
エンジニア - C#のShowDialogメソッドを利用すると、モーダルダイアログとして呼び出せるのですね。
- プロジェクト
マネージャー - そのとおりです。C#では、他に戻り値の取得やデータのやり取りもできますよ。
C#のShowDialogメソッドを利用してみよう
C#のShowDialogメソッドを利用することで、モーダルダイアログとして呼び出せます。C#では、戻り値の取得や、データやり取りもできます。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)