C#でフォーム閉じる方法とは?戻り値の取得方法をご紹介!

- システム
エンジニア - C#でのフォームを閉じるにはどのような方法があるのですか。
- プロジェクト
マネージャー - C#のフォームを閉じるには、Form.Closeメソッドを使用する方法と別のアプリケーションからFormを閉じる方法があります。
C#のフォームを閉じる方法とは?
今回は、C#でのフォームを閉じる方法について説明します。フォームを閉じる方法や閉じさせない方法について、実際のソースコードを交えて紹介します。
また、フォームを閉じた際の、戻り値を取得する方法についても紹介します。C#でのフォームを閉じる方法に興味のある方はぜひご覧ください。
Formを閉じる(自分自身のFormを閉じる)
C#のフォームを閉じるには、Form.Closeメソッドを使用します。
フォームにボタンを配置し、ボタンのクリックイベントで閉じるサンプルプログラムです。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Formを閉じる this.Close(); } } } |
button1ボタンをクリックすると、フォームが閉じられることが分かります。
また、Closeメソッドではなく、C#のApplication.Exitメソッドでアプリケーション自体を終了できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Formを閉じる Application.Exit(); } } } |
button1ボタンをクリックすると、フォームが閉じられることが分かります。
Formを閉じる(別アプリから閉じる)
C#では、別のアプリケーションからFormを閉じることもできます。
実際のソースコードを見てみましょう。
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 |
using System; using System.Diagnostics; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // 自プロセスのプロセス名を取得する Process myProcess = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(myProcess.ProcessName); // WindowsFormsApp1をすべて終了させる foreach (Process process in processes) { // クローズメッセージを送信する process.CloseMainWindow(); // プロセスが終了するまで最大10秒待機する process.WaitForExit(10000); // プロセスが終了したか確認する if (!process.HasExited) { MessageBox.Show("終了しませんでした。"); } } //this.Close(); } } } |
WindowsFormsApp1.exeの出力フォルダを開き、WindowsFormsApp1.exeを2つ起動します。
どちらかのbutton1ボタンをクリックすると、WindowsFormsApp1.exeが2つとも終了することが分かります。
Formを閉じさせない
C#のフォームが閉じられるのをキャンセルしたり、アプリケーション自体の終了をキャンセルしたりすることがあります。また、フォームが閉じられるときに、FormClosingイベントが呼び出されます。
引数のFormClosingEventArgsのCancelプロパティにTrueを代入することで、フォームを閉じさせなくすることが可能です。
実際のソースコードを見てみましょう。
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 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Formを閉じる this.Close(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Formを閉じさせない e.Cancel = true; } } } |
ボタン操作ではフォームが閉じられないことが分かります。
タスクマネージャーからアプリケーションを終了させてください。
閉じるボタンの非表示
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 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); // ×ボタンを消す。最小化、最大化ボタンも消える this.ControlBox = false; } private void button1_Click(object sender, EventArgs e) { // Formを閉じる this.Close(); } } } |
この場合、最小化、最大化ボタンも消えてしまいます。
button1ボタンをクリックして終了させてください。
閉じた場合の戻り値
C#のフォームの戻り値を取得できます。
実際のソースコードを見てみましょう。
・呼ぶ側
1 2 3 4 |
Form1 form = new Form1(); MessageBox.Show(form.ShowDialog().ToString()); |
・呼ばれた側
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 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Formを閉じる this.DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); } private void button2_Click(object sender, EventArgs e) { // Formを閉じる this.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.Close(); } } } |
このように、フォームを閉じた際の戻り値を取得できます。
- システム
エンジニア - フォームを閉じさせなくすることもできるのですね。
- プロジェクト
マネージャー - そうですね。閉じるボタンを非表示にすることもできますよ。
C#のソースコードを書いてみよう
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万円東京都新宿区(西新宿駅)