c# フォーム入門|作り方・画面遷移・イベント処理まで初心者向けに解説
はじめに
C#でデスクトップアプリを作りたいとき、初心者が最初に学びやすいのが「C#フォーム」です。ボタン、入力欄、ラベル、一覧表などを画面に配置し、クリックや入力といった操作に応じて処理を書くことで、Windows上で動くアプリを作成できます。
C#フォームは、正式にはWindows Forms、またはWinFormsと呼ばれる技術です。Visual Studioを使えば、画面をドラッグ&ドロップで作成できるため、プログラミング初心者でも完成形をイメージしながら学習しやすいのが特徴です。
この記事では、C#フォームの基礎から、フォームアプリの作り方、コントロールの配置、イベント処理、画面遷移、フォーム間のデータ受け渡し、よくあるエラーまでを初心者向けに解説します。
1. C#フォームとは?初心者が最初に知るべき基礎知識
C#フォームとは、C#でWindows向けの画面付きアプリを作るための仕組みです。文字だけで操作するコンソールアプリとは異なり、ウィンドウ、ボタン、テキストボックスなどを使った視覚的なアプリを開発できます。
たとえば、次のようなアプリを作れます。
入力フォーム、在庫管理ツール、売上集計アプリ、メモ帳、設定画面、簡易電卓、CSV読み込みツールなどです。社内ツールや学習用アプリを作る場合にも、C#フォームは非常に扱いやすい選択肢です。
1-1. C#フォームはWindows Forms(WinForms)のこと
「C#フォーム」という言葉は、一般的にC#で作るWindows Formsアプリを指します。Windows Formsは、Windowsデスクトップアプリを作成するためのGUIフレームワークです。
GUIとは、Graphical User Interfaceの略で、ボタンや入力欄などを使って操作できる画面のことです。
C#フォームでは、フォームと呼ばれるウィンドウ上にコントロールを配置します。コントロールとは、Label、TextBox、Button、ComboBox、CheckBoxなどの画面部品のことです。
フォームはアプリの画面そのものであり、コントロールはその画面に置く部品だと考えるとわかりやすいです。
1-2. C#フォームで作れるアプリの例
C#フォームで作れるアプリには、次のようなものがあります。
名前や住所を入力する登録フォーム、入力内容を確認する画面、商品一覧を表示する管理画面、ボタンを押すと計算結果を表示する電卓アプリ、ファイルを読み込んで内容を表示するツール、データベースに接続して検索や更新を行う業務アプリなどです。
特に、Windowsパソコンで使う小規模な業務ツールを作る場合、C#フォームは今でも実用的です。画面設計がしやすく、Visual Studioのデザイナー機能を使えば、プログラムだけで画面を作る必要がありません。
1-3. WPF・コンソールアプリ・Webアプリとの違い
C#でアプリを作る方法は、C#フォームだけではありません。代表的なものに、WPF、コンソールアプリ、Webアプリがあります。
C#フォームは、Windows向けの画面付きデスクトップアプリを作るための技術です。画面を簡単に作りやすく、初心者にも理解しやすい構造になっています。
WPFもWindows向けのデスクトップアプリを作る技術ですが、画面デザインにXAMLを使います。柔軟で高度なデザインができますが、初心者には少し学習コストが高く感じられることがあります。
コンソールアプリは、黒い画面に文字を表示して操作するアプリです。C#の文法を学ぶには向いていますが、ボタンや入力欄のある画面は作れません。
Webアプリは、ブラウザ上で動くアプリです。ASP.NETなどを使って作成します。インターネット経由で使える反面、HTML、CSS、JavaScript、サーバーなどの知識も必要になります。
初心者が「C#で画面付きアプリを作ってみたい」と考えるなら、まずはC#フォームから始めると理解しやすいでしょう。
1-4. C#フォーム学習に必要な前提知識
C#フォームを学ぶ前に、最低限知っておきたいC#の基礎があります。
変数、if文、for文、メソッド、クラス、プロパティ、イベント、例外処理などです。ただし、すべてを完璧に理解してから始める必要はありません。
C#フォームでは、ボタンを押したときの処理や、テキストボックスに入力された値の取得などを通じて、C#の基本文法を実践的に学べます。
たとえば、TextBoxに入力された文字をLabelに表示するだけでも、変数、プロパティ、イベント処理を自然に学習できます。
2. C#フォーム開発に必要な環境
C#フォーム開発には、基本的にVisual Studioを使います。Visual Studioには画面デザイナー、コードエディター、デバッグ機能、プロジェクト管理機能がそろっているため、初心者でも効率よく開発できます。
2-1. Visual Studioのインストール
C#フォームを作成するには、Visual Studioをインストールします。個人学習や小規模開発であれば、Visual Studio Communityを利用できます。
インストール時には、ワークロードの選択画面で「.NET デスクトップ開発」を選びます。これを選択すると、Windows FormsアプリやWPFアプリを作成するために必要な機能がインストールされます。
インストール後、Visual Studioを起動し、「新しいプロジェクトの作成」からC#フォームアプリを作成できます。
2-2. Windowsフォームアプリのテンプレート選び
Visual Studioで新しいプロジェクトを作成するときは、テンプレートを選びます。C#フォームの場合は、主に次のようなテンプレートがあります。
「Windows Forms アプリ」と「Windows Forms アプリ(.NET Framework)」です。
初心者が新しく学習する場合は、基本的には「Windows Forms アプリ」を選ぶのがおすすめです。これは新しい.NETを使うプロジェクトです。
一方、古い教材や既存システムの保守では「Windows Forms アプリ(.NET Framework)」が使われていることもあります。会社の既存プロジェクトに合わせる必要がある場合は、その環境に従いましょう。
2-3. .NETと.NET Frameworkの違い
C#フォームを学ぶときに混乱しやすいのが、.NETと.NET Frameworkの違いです。
.NET Frameworkは、以前から使われているWindows向けの開発基盤です。古いWindows Formsアプリでは、.NET Frameworkを使っているケースが多くあります。
一方、.NETは新しい開発基盤です。現在の新規開発では、特別な理由がなければ.NETを選ぶ場面が多くなっています。
初心者が学習目的でC#フォームを作るなら、新しい「Windows Forms アプリ」を選ぶとよいでしょう。ただし、参考にしている教材が.NET Framework向けの場合、画面やコードの一部が異なることがあります。
2-4. 初心者におすすめのプロジェクト設定
初心者におすすめの設定は、次のようなシンプルな構成です。
プロジェクトの種類は「Windows Forms アプリ」、言語はC#、プロジェクト名はわかりやすく「SampleFormApp」や「FormPractice」などにします。
最初は複雑な設定を変更する必要はありません。Visual Studioが自動で作成するForm1を使い、Label、TextBox、Buttonを配置するところから始めるのがおすすめです。
3. C#フォームアプリの作り方
ここからは、実際にC#フォームアプリを作る流れを解説します。最初は難しい処理を入れず、フォームを表示するだけのアプリを作ってみましょう。
3-1. 新しいプロジェクトを作成する
Visual Studioを起動し、「新しいプロジェクトの作成」を選びます。
検索欄に「Windows Forms」と入力し、C#の「Windows Forms アプリ」を選択します。プロジェクト名を入力し、保存場所を選んで作成します。
プロジェクトが作成されると、Form1という画面が表示されます。このForm1が、最初に表示されるC#フォームです。
3-2. Form1.cs・Designer.cs・Program.csの役割
C#フォームアプリを作成すると、主に次のファイルが作られます。
Form1.csは、フォームの処理を書くファイルです。ボタンをクリックしたときの処理や、画面を読み込んだときの処理などを書きます。
Form1.Designer.csは、フォームに配置したコントロールの情報を管理するファイルです。デザイナーでLabelやButtonを配置すると、その内容が自動的にコードとして保存されます。基本的に初心者が直接編集する必要はありません。
Program.csは、アプリの起動処理を書くファイルです。どのフォームを最初に表示するかを指定しています。
たとえば、Program.csには次のようなコードがあります。
C#Application.Run(new Form1());
このコードによって、アプリ起動時にForm1が表示されます。
3-3. フォームのサイズ・タイトル・表示位置を設定する
フォームの見た目は、プロパティウィンドウから設定できます。
フォームをクリックし、プロパティウィンドウでTextを変更すると、ウィンドウのタイトルが変わります。Sizeを変更すると、フォームの幅と高さを設定できます。StartPositionをCenterScreenにすると、画面中央に表示できます。
コードで設定する場合は、Form1のコンストラクタやLoadイベントに次のように書きます。
C#public Form1()
{
InitializeComponent();
this.Text = "C#フォーム入門";
this.Width = 600;
this.Height = 400;
this.StartPosition = FormStartPosition.CenterScreen;
}
フォームの基本設定を覚えると、アプリらしい画面を作りやすくなります。
3-4. 実行して画面を表示する
フォームを作成したら、Visual Studioの上部にある開始ボタンをクリックします。キーボードのF5キーでも実行できます。
正常に実行されると、Form1の画面が表示されます。これがC#フォームアプリの基本です。
エラーが出る場合は、コードの入力ミス、プロジェクトの種類、参照設定などを確認しましょう。
4. フォームに部品を配置する方法
C#フォームでは、画面にさまざまな部品を配置してアプリを作ります。この部品をコントロールと呼びます。
4-1. コントロールとは?
コントロールとは、フォーム上に配置する画面部品のことです。
代表的なコントロールには、Label、TextBox、Button、ComboBox、CheckBox、RadioButton、ListBox、DataGridViewなどがあります。
Visual Studioでは、ツールボックスからコントロールを選び、フォーム上にドラッグ&ドロップするだけで配置できます。
配置したコントロールには、Name、Text、Size、Locationなどのプロパティがあります。Nameはコードから操作するときの名前、Textは画面に表示される文字です。
4-2. Label・TextBox・Buttonの使い方
C#フォームで最初に覚えたいのが、Label、TextBox、Buttonです。
Labelは文字を表示するためのコントロールです。説明文や結果表示に使います。
TextBoxはユーザーに文字を入力してもらうためのコントロールです。名前、メールアドレス、数値などの入力欄として使います。
Buttonはクリックできるボタンです。登録、検索、計算、確認などの処理を実行するときに使います。
たとえば、TextBoxに入力された名前をButtonクリックでLabelに表示する場合、次のように書きます。
C#private void button1_Click(object sender, EventArgs e)
{
label1.Text = textBox1.Text + "さん、こんにちは。";
}
このように、C#フォームでは画面部品のプロパティをコードから変更して処理を作ります。
4-3. ComboBox・CheckBox・RadioButtonの使い方
ComboBoxは、複数の選択肢から1つを選ぶためのコントロールです。都道府県、カテゴリ、部署名などを選ばせるときに使います。
C#comboBox1.Items.Add("東京");
comboBox1.Items.Add("大阪");
comboBox1.Items.Add("福岡");
CheckBoxは、オン・オフを選ぶためのコントロールです。複数選択が可能です。
C#if (checkBox1.Checked)
{
MessageBox.Show("チェックされています。");
}
RadioButtonは、複数の選択肢から1つだけ選ぶときに使います。性別、支払い方法、プラン選択などに向いています。
C#if (radioButton1.Checked)
{
MessageBox.Show("選択肢1が選ばれました。");
}
ComboBox、CheckBox、RadioButtonを使えるようになると、入力フォームの表現力が大きく広がります。
4-4. ListBox・DataGridViewの使い方
ListBoxは、複数の項目を一覧表示するためのコントロールです。簡単なリスト表示に向いています。
C#listBox1.Items.Add("りんご");
listBox1.Items.Add("みかん");
listBox1.Items.Add("ぶどう");
DataGridViewは、表形式でデータを表示するためのコントロールです。商品一覧、顧客一覧、売上一覧などを表示するときに便利です。
C#dataGridView1.Columns.Add("Name", "商品名");
dataGridView1.Columns.Add("Price", "価格");
dataGridView1.Rows.Add("ノート", "120");
dataGridView1.Rows.Add("ペン", "80");
ListBoxは単純な一覧、DataGridViewは表形式の一覧に向いています。用途に応じて使い分けましょう。
4-5. 見やすい画面レイアウトを作るコツ
C#フォームでは、ただ部品を並べるだけでなく、見やすい配置を意識することが大切です。
入力項目は左にLabel、右にTextBoxを配置するとわかりやすくなります。ボタンは画面下部や右下にまとめると、操作しやすい画面になります。
また、コントロール同士の間隔をそろえる、文字の位置を合わせる、不要な情報を詰め込みすぎないことも重要です。
複雑な画面を作る場合は、GroupBoxやPanelを使って関連する項目をまとめると、見た目が整理されます。
5. C#フォームのイベント処理
C#フォームでは、ユーザーの操作に応じて処理を実行します。この仕組みをイベント処理と呼びます。
5-1. イベント処理とは?
イベントとは、ボタンがクリックされた、文字が入力された、フォームが読み込まれた、フォームが閉じられようとしている、といった出来事のことです。
イベント処理とは、その出来事が起きたときに実行する処理を書くことです。
たとえば、ButtonのClickイベントに処理を書くと、ボタンがクリックされたタイミングでコードが実行されます。
5-2. ボタンクリック時の処理を書く
ボタンをダブルクリックすると、Clickイベントのコードが自動で作成されます。
C#private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("ボタンがクリックされました。");
}
MessageBox.Showは、メッセージ画面を表示するためのメソッドです。C#フォームでは、処理結果や確認メッセージを表示するときによく使います。
TextBoxの入力内容を取得する場合は、次のように書きます。
C#private void button1_Click(object sender, EventArgs e)
{
string name = textBox1.Text;
MessageBox.Show(name + "さん、ようこそ。");
}
5-3. テキスト入力時の処理を書く
TextBoxにはTextChangedイベントがあります。これは、入力内容が変更されたときに実行されるイベントです。
C#private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = textBox1.Text;
}
このコードでは、TextBoxに入力した文字がそのままLabelに表示されます。
リアルタイムで入力内容を反映したい場合や、文字数をカウントしたい場合に便利です。
C#private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = textBox1.Text.Length + "文字入力されています。";
}
5-4. フォーム読み込み時のLoadイベントを使う
フォームが表示される前後の初期処理には、Loadイベントを使います。
C#private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("未選択");
comboBox1.Items.Add("東京");
comboBox1.Items.Add("大阪");
comboBox1.SelectedIndex = 0;
}
Loadイベントでは、ComboBoxの初期値設定、一覧データの読み込み、画面表示前の初期化などを行います。
初心者は、画面を開いたときに最初に実行したい処理を書く場所として覚えておくとよいでしょう。
5-5. フォーム終了時のFormClosingイベントを使う
フォームを閉じる前に処理を行いたい場合は、FormClosingイベントを使います。
たとえば、閉じる前に確認メッセージを表示する場合は、次のように書きます。
C#private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show(
"終了してもよろしいですか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (result == DialogResult.No)
{
e.Cancel = true;
}
}
e.Cancelにtrueを設定すると、フォームを閉じる処理をキャンセルできます。
5-6. イベントが動かないときの確認ポイント
イベントが動かないときは、まずイベントが正しく関連付けられているか確認しましょう。
ボタンをクリックしても処理が動かない場合、Clickイベントにメソッドが設定されていない可能性があります。デザイナーでボタンを選択し、プロパティウィンドウの雷マークからClickイベントを確認します。
また、コントロール名を変更したあとに、古い名前のままコードを書いている場合もエラーになります。
イベント処理の中にブレークポイントを置いて、実行時に処理が通っているか確認するのも有効です。
6. C#フォームで画面遷移する方法
C#フォームアプリでは、複数のフォームを使って画面遷移を実装できます。たとえば、メイン画面から設定画面を開いたり、入力画面から確認画面へ進んだりできます。
6-1. 別フォームを追加する
別フォームを追加するには、プロジェクトを右クリックして「追加」から「Windowsフォーム」を選択します。
名前をForm2.csなどにして追加すると、新しいフォームが作成されます。
Form1がメイン画面、Form2が遷移先画面という構成で考えるとわかりやすいです。
6-2. Showでフォームを開く
別フォームを開く基本的な方法はShowメソッドです。
C#private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
Showを使うと、Form2を開いたあともForm1を操作できます。このような画面を非モーダル画面と呼びます。
設定画面やサブ画面を自由に開いて操作したい場合に使います。
6-3. ShowDialogでモーダル画面を開く
ShowDialogを使うと、開いたフォームを閉じるまで元のフォームを操作できなくなります。
C#private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
このような画面をモーダル画面と呼びます。確認画面、入力ダイアログ、設定ダイアログなどに向いています。
ユーザーに必ず確認してもらいたい画面では、ShowDialogを使うと便利です。
6-4. Hide・Close・Disposeの違い
C#フォームで画面遷移を作るときは、Hide、Close、Disposeの違いを理解しておく必要があります。
Hideはフォームを非表示にするだけです。フォーム自体はメモリ上に残っています。再度Showすれば表示できます。
Closeはフォームを閉じます。フォームが閉じられると、通常は再利用できません。
Disposeはフォームが使用していたリソースを解放します。Close後に内部的にDisposeされることもありますが、明示的にリソースを解放したいときに使います。
初心者は、単に画面を隠したいならHide、不要になった画面を閉じたいならCloseと覚えておくとよいでしょう。
6-5. Form1からForm2へ遷移する基本コード
Form1からForm2へ遷移する基本コードは次の通りです。
C#private void buttonNext_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
this.Hide();
}
このコードでは、Form2を表示し、Form1を非表示にしています。
ただし、Form1をHideしたままForm2だけを閉じると、アプリが見えない状態で残ることがあります。そのため、Form2を閉じたときにForm1を再表示する処理を入れると安全です。
C#private void buttonNext_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.FormClosed += (s, args) => this.Show();
form2.Show();
this.Hide();
}
6-6. 戻るボタン・閉じるボタンの実装方法
Form2に戻るボタンを作る場合は、Form2を閉じてForm1を再表示する方法がよく使われます。
Form1側でForm2のFormClosedイベントにthis.Showを設定しておけば、Form2を閉じたときにForm1が再表示されます。
Form2側の戻るボタンには次のように書きます。
C#private void buttonBack_Click(object sender, EventArgs e)
{
this.Close();
}
閉じるボタンも同じようにCloseを使います。
C#private void buttonClose_Click(object sender, EventArgs e)
{
this.Close();
}
画面遷移では、フォームを隠すのか、閉じるのか、再表示するのかを明確にしておくことが大切です。
7. フォーム間でデータを渡す方法
複数フォームを使うと、Form1で入力した値をForm2に表示したい場面があります。C#フォームでは、コンストラクタ、プロパティ、DialogResultなどを使ってデータを渡せます。
7-1. コンストラクタで値を渡す
最もわかりやすい方法は、Form2のコンストラクタに値を渡す方法です。
Form2側に、文字列を受け取るコンストラクタを作ります。
C#public partial class Form2 : Form
{
public Form2(string name)
{
InitializeComponent();
label1.Text = name;
}
}
Form1側では、TextBoxの値を渡してForm2を開きます。
C#private void buttonNext_Click(object sender, EventArgs e)
{
string name = textBoxName.Text;
Form2 form2 = new Form2(name);
form2.ShowDialog();
}
この方法は、遷移先フォームを開くときに必要な値が決まっている場合に向いています。
7-2. プロパティで値を渡す
プロパティを使って値を渡す方法もあります。
Form2側にプロパティを用意します。
C#public string UserName { get; set; }
Form2のLoadイベントで表示します。
C#private void Form2_Load(object sender, EventArgs e)
{
label1.Text = UserName;
}
Form1側では、Form2を作成したあとにプロパティへ値を設定します。
C#private void buttonNext_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.UserName = textBoxName.Text;
form2.ShowDialog();
}
プロパティを使うと、複数の値を柔軟に設定しやすくなります。
7-3. ダイアログの結果を受け取る
ShowDialogを使うと、遷移先フォームの結果をForm1で受け取ることができます。
Form2側でOKボタンを押したとき、DialogResultを設定します。
C#private void buttonOk_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
Form1側では、ShowDialogの戻り値を確認します。
C#private void buttonOpen_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
if (form2.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("OKが押されました。");
}
}
確認画面や入力ダイアログを作るときに便利です。
7-4. 複数フォームでデータを共有するときの注意点
複数フォームでデータを共有するときは、どのフォームがどのデータを管理するのかを明確にしましょう。
初心者がやりがちな失敗は、すべてのフォームから直接別フォームのコントロールを操作しようとすることです。これはコードが複雑になり、保守しにくくなります。
できるだけ、値はコンストラクタやプロパティで渡し、フォーム同士の依存を少なくすることが大切です。
データが増えてきたら、専用のクラスを作って管理するとコードが整理しやすくなります。
8. 初心者向けサンプルアプリで学ぶC#フォーム
ここでは、名前と年齢を入力して、確認画面へ遷移する簡単なC#フォームアプリを作ります。
8-1. 入力フォームを作る
まずForm1に次のコントロールを配置します。
名前入力用のTextBoxをtextBoxName、年齢入力用のTextBoxをtextBoxAge、結果表示用のLabelをlabelResult、確認ボタンをbuttonConfirmとします。
画面には、名前、年齢、確認ボタンが並ぶシンプルな入力フォームを作ります。
8-2. 入力チェックを実装する
ボタンをクリックしたとき、入力内容が空でないか、年齢が数値かを確認します。
C#private bool ValidateInput()
{
if (string.IsNullOrWhiteSpace(textBoxName.Text))
{
MessageBox.Show("名前を入力してください。");
textBoxName.Focus();
return false;
}
if (!int.TryParse(textBoxAge.Text, out int age))
{
MessageBox.Show("年齢は数値で入力してください。");
textBoxAge.Focus();
return false;
}
if (age < 0)
{
MessageBox.Show("年齢は0以上で入力してください。");
textBoxAge.Focus();
return false;
}
return true;
}
入力チェックをメソッドに分けると、ボタンクリックの処理が読みやすくなります。
8-3. ボタンクリックで結果を表示する
入力チェックに成功したら、Labelに結果を表示します。
C#private void buttonConfirm_Click(object sender, EventArgs e)
{
if (!ValidateInput())
{
return;
}
string name = textBoxName.Text;
int age = int.Parse(textBoxAge.Text);
labelResult.Text = $"{name}さんは{age}歳です。";
}
このコードでは、入力された名前と年齢を使って、結果を画面に表示しています。
8-4. 確認画面へ画面遷移する
次に、Form2を追加し、Form1から確認画面として開きます。
Form2にはLabelを2つ配置し、labelName、labelAgeという名前にします。
Form2側のコードは次のようにします。
C#public partial class Form2 : Form
{
public Form2(string name, int age)
{
InitializeComponent();
labelName.Text = "名前:" + name;
labelAge.Text = "年齢:" + age.ToString();
}
private void buttonClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
Form1側では、確認ボタンを押したときにForm2を開きます。
C#private void buttonConfirm_Click(object sender, EventArgs e)
{
if (!ValidateInput())
{
return;
}
string name = textBoxName.Text;
int age = int.Parse(textBoxAge.Text);
Form2 form2 = new Form2(name, age);
form2.ShowDialog();
}
ShowDialogを使うことで、確認画面を閉じるまでForm1を操作できないようにできます。
8-5. 完成コードの全体像
Form1の完成コード例は次の通りです。
C#public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = "入力フォーム";
this.StartPosition = FormStartPosition.CenterScreen;
}
private void buttonConfirm_Click(object sender, EventArgs e)
{
if (!ValidateInput())
{
return;
}
string name = textBoxName.Text;
int age = int.Parse(textBoxAge.Text);
Form2 form2 = new Form2(name, age);
form2.ShowDialog();
}
private bool ValidateInput()
{
if (string.IsNullOrWhiteSpace(textBoxName.Text))
{
MessageBox.Show("名前を入力してください。");
textBoxName.Focus();
return false;
}
if (!int.TryParse(textBoxAge.Text, out int age))
{
MessageBox.Show("年齢は数値で入力してください。");
textBoxAge.Focus();
return false;
}
if (age < 0)
{
MessageBox.Show("年齢は0以上で入力してください。");
textBoxAge.Focus();
return false;
}
return true;
}
}
Form2の完成コード例は次の通りです。
C#public partial class Form2 : Form
{
public Form2(string name, int age)
{
InitializeComponent();
this.Text = "確認画面";
this.StartPosition = FormStartPosition.CenterParent;
labelName.Text = "名前:" + name;
labelAge.Text = "年齢:" + age.ToString();
}
private void buttonClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
このサンプルでは、入力、入力チェック、画面遷移、フォーム間のデータ受け渡しを一通り学べます。
9. C#フォーム開発でよくあるエラーと解決方法
C#フォームを学習していると、画面が表示されない、ボタンが反応しない、別フォームがうまく開かないなどのトラブルがよく起こります。原因を知っておくと、スムーズに解決できます。
9-1. フォームが表示されない
フォームが表示されない場合、Program.csのApplication.Runに指定されているフォームを確認しましょう。
C#Application.Run(new Form1());
別のフォームを最初に表示したい場合は、ここを変更します。
C#Application.Run(new MainForm());
また、フォームのLoadイベントで例外が発生している場合も、画面が表示されないことがあります。デバッグ実行して、エラー内容を確認しましょう。
9-2. ボタンを押しても反応しない
ボタンを押しても反応しない場合、Clickイベントが正しく設定されていない可能性があります。
デザイナーでボタンを選択し、プロパティウィンドウの雷マークからClickイベントを確認します。button1_Clickなどのメソッドが設定されているか見てください。
コードだけを書いても、イベントに関連付けられていなければ実行されません。
9-3. 別フォームが何度も開いてしまう
ボタンを押すたびに新しいフォームを作成していると、同じ画面が何度も開くことがあります。
C#Form2 form2 = new Form2();
form2.Show();
このコードは、実行するたびに新しいForm2を作ります。
1つだけ開きたい場合は、フォームがすでに存在するか管理する必要があります。
C#private Form2 form2;
private void buttonOpen_Click(object sender, EventArgs e)
{
if (form2 == null || form2.IsDisposed)
{
form2 = new Form2();
form2.Show();
}
else
{
form2.Activate();
}
}
このようにすると、すでに開いている場合は新しく作らず、既存のフォームを前面に表示できます。
9-4. フォームを閉じるとアプリ全体が終了する
Application.Runで起動しているメインフォームを閉じると、アプリ全体が終了します。
たとえば、Form1がメインフォームの場合、Form1をCloseするとアプリが終了します。
画面遷移でForm1を残したい場合は、CloseではなくHideを使う方法があります。
C#Form2 form2 = new Form2();
form2.FormClosed += (s, args) => this.Show();
form2.Show();
this.Hide();
ただし、Hideしたフォームを再表示しないままにすると、画面が見えない状態でアプリが残ることがあります。画面遷移の流れを整理して実装しましょう。
9-5. コントロール名が見つからない
「現在のコンテキストに〇〇という名前は存在しません」というエラーが出る場合、コントロール名が間違っている可能性があります。
TextBoxのNameがtextBox1なのに、コードでtextBoxNameと書いているとエラーになります。
デザイナーでコントロールを選択し、プロパティのNameを確認しましょう。TextプロパティとNameプロパティは別物です。
Textは画面に表示される文字、Nameはコードから使う名前です。
9-6. デザイナー画面が開けない
デザイナー画面が開けない場合、Form1.Designer.csやForm1.csにエラーがある可能性があります。
特に、InitializeComponentの前後を誤って変更した場合や、コントロールの宣言を手動で削除した場合に起こりやすいです。
まずはエラー一覧を確認し、ビルドエラーを修正しましょう。Designer.csは自動生成されるファイルなので、初心者は基本的に直接編集しない方が安全です。
10. C#フォームを学んだ後に身につけたいこと
C#フォームの基本を学んだら、次はより実用的なアプリ開発に進みましょう。画面を作れるだけでなく、コードの整理、ファイル操作、データベース連携などを学ぶことで、作れるアプリの幅が広がります。
10-1. クラス分けでコードを整理する
初心者のうちは、Form1.csにすべての処理を書きがちです。しかし、処理が増えるとコードが読みにくくなります。
入力チェック、計算処理、データ管理などは、別のクラスに分けると整理しやすくなります。
たとえば、ユーザー情報を扱うクラスを作ると、フォーム側のコードがすっきりします。
C#public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
フォームは画面表示と操作の受付を担当し、細かい処理は別クラスに任せる意識を持つとよいでしょう。
10-2. ファイル保存・読み込みを実装する
C#フォームでは、入力した内容をファイルに保存したり、ファイルから読み込んだりできます。
C#File.WriteAllText("memo.txt", textBox1.Text);
読み込みは次のように書けます。
C#if (File.Exists("memo.txt"))
{
textBox1.Text = File.ReadAllText("memo.txt");
}
メモ帳アプリや設定保存機能を作るときに役立ちます。
10-3. データベース連携に挑戦する
業務アプリを作るなら、データベース連携も重要です。
SQL Server、SQLite、MySQLなどを使うと、顧客情報、商品情報、売上データなどを保存・検索できます。
最初はSQLiteのような軽量データベースから始めると学習しやすいです。DataGridViewと組み合わせると、データ一覧を画面に表示できます。
10-4. 例外処理と入力チェックを強化する
実用的なアプリでは、想定外の入力やエラーに対応する必要があります。
たとえば、数値変換にはint.Parseではなくint.TryParseを使うと安全です。
C#if (!int.TryParse(textBoxAge.Text, out int age))
{
MessageBox.Show("数値を入力してください。");
return;
}
ファイル操作やデータベース処理では、try-catchを使って例外に対応します。
C#try
{
string text = File.ReadAllText("sample.txt");
textBox1.Text = text;
}
catch (Exception ex)
{
MessageBox.Show("ファイルの読み込みに失敗しました。" + ex.Message);
}
エラーが起きたときにアプリが突然終了しないよう、例外処理を意識しましょう。
10-5. 配布用のexeファイルを作成する
C#フォームアプリは、ビルドするとexeファイルとして実行できます。
Visual Studioでビルドすると、binフォルダ内に実行ファイルが作成されます。学習用であれば、このexeを実行して動作確認できます。
ほかのパソコンに配布する場合は、必要な.NETランタイムや関連ファイルも考慮する必要があります。Visual Studioの発行機能を使うと、配布用の構成を作成できます。
11. C#フォームに関するよくある質問
ここでは、C#フォームを学ぶ初心者が疑問に思いやすい内容をまとめます。
11-1. C#フォームは今から学んでも意味がある?
C#フォームは今から学んでも意味があります。特に、Windows向けのデスクトップアプリや社内ツールを作りたい場合には役立ちます。
また、ボタン、入力欄、イベント処理、画面遷移など、GUIアプリ開発の基本を学ぶ教材としても優れています。
ただし、高度なデザインや新しいUI表現を重視する場合は、WPFや他の技術も検討するとよいでしょう。
11-2. Windows FormsとWinFormsは同じ?
Windows FormsとWinFormsは、基本的に同じものを指します。
正式名称はWindows Formsですが、略してWinFormsと呼ばれることが多いです。「C#フォーム」という表現も、一般的にはC#で作るWindows Formsアプリを意味します。
11-3. C#フォームはMacでも作れる?
C#フォームは基本的にWindows向けの技術です。Visual Studioを使ったWindows Forms開発は、Windows環境で行うのが一般的です。
MacでC#を学ぶことはできますが、Windows Formsのデザイナーや実行環境を考えると、C#フォームを本格的に学ぶならWindowsパソコンを使うのが無難です。
Macで画面付きアプリを作りたい場合は、別のUI技術やクロスプラットフォーム開発の選択肢を検討する必要があります。
11-4. .NET Frameworkと.NETのどちらを選ぶべき?
新しくC#フォームを学ぶ場合は、基本的には.NETのWindows Formsアプリを選ぶのがおすすめです。
ただし、古い教材や既存の業務システムでは.NET Frameworkが使われていることもあります。会社のプロジェクトや教材に合わせる必要がある場合は、その環境に従いましょう。
学習目的なら、新しい.NETで基本を学び、必要に応じて.NET Frameworkの違いを確認する流れで問題ありません。
11-5. C#フォームとWPFはどちらが初心者向け?
初心者には、C#フォームの方が始めやすいことが多いです。
C#フォームは、Visual Studioのデザイナーで部品を配置し、イベント処理を書く流れがわかりやすいため、画面付きアプリの基本を学びやすいです。
WPFは、XAMLを使って柔軟な画面を作れる強力な技術ですが、最初は覚えることが多く感じられるかもしれません。
まずはC#フォームでGUIアプリの基本を学び、その後にWPFへ進むと理解しやすくなります。
まとめ
C#フォームは、C#でWindows向けの画面付きアプリを作るための基本的な技術です。Visual Studioを使えば、フォームにLabel、TextBox、Buttonなどのコントロールを配置し、イベント処理を書くことで、初心者でも実用的なアプリを作成できます。
C#フォームを学ぶうえで重要なのは、フォームの役割、コントロールの使い方、イベント処理、画面遷移、フォーム間のデータ受け渡しを順番に理解することです。
最初は、ボタンを押すとメッセージを表示するだけの簡単なアプリから始めましょう。慣れてきたら、入力チェック、確認画面、ファイル保存、データベース連携などに挑戦すると、実践的なスキルが身につきます。
C#フォームは、プログラミング初心者が「自分で操作できるアプリを作る楽しさ」を感じやすい分野です。基礎をしっかり押さえれば、業務ツールや学習用アプリなど、さまざまなWindowsアプリ開発に応用できます。

