csharp forms入門|C#でWindowsフォームアプリを作る基本手順とよくある悩みを解決

はじめに

「csharp forms」と検索している人の多くは、C#を使って画面付きのWindowsアプリを作りたい、Visual Studioでフォームを作る方法を知りたい、あるいはWindows FormsとC# Formsの違いを整理したいと考えているはずです。

C#でデスクトップアプリを作る代表的な方法のひとつが、Windows Forms、通称WinFormsです。Windows Formsは、Windows向けのデスクトップアプリを作るためのUIフレームワークで、Visual Studioのフォームデザイナーを使うと、ボタンやテキストボックスなどの部品をドラッグ&ドロップで配置できます。Microsoft公式ドキュメントでも、Windows FormsはWindowsデスクトップアプリを作るためのUIフレームワークとして説明されています。Microsoft Learn+1

この記事では、csharp formsの基本として、Windows Formsとは何か、開発環境の準備、フォームの作り方、イベント処理、よく使うコントロール、初心者がつまずきやすいエラーの解決方法までを順番に解説します。

1. csharp formsとは?C#でWindowsフォームアプリを作る前に知るべき基礎

1-1. 「csharp forms」で検索する人が知りたいこと

「csharp forms」という検索キーワードは、厳密な正式名称というより、「C#でフォームアプリを作る方法」を探しているときに使われやすい言葉です。具体的には、次のような疑問を持っている人が多いでしょう。

C#で画面付きアプリを作るには何を使えばよいのか。
Windows FormsとWinFormsは同じものなのか。
Visual Studioでフォーム画面を作るにはどうすればよいのか。
ButtonやTextBoxを使って処理を動かすにはどうすればよいのか。
.NETと.NET Frameworkのどちらを選べばよいのか。
エラーが出たとき、どこを確認すればよいのか。

C#にはコンソールアプリ、Webアプリ、WPF、MAUI、ゲーム開発などさまざまな選択肢があります。その中でWindows Formsは、Windows上で動くシンプルな画面付きアプリを作りたい初心者にとって、最初に触れやすい選択肢です。

1-2. Windows Forms(WinForms)とC#の関係

Windows Formsは、C#専用の技術ではありません。C#やVisual Basicなどの.NET言語から利用できる、Windowsデスクトップアプリ用のUIフレームワークです。ただし、現在はC#でWindows Formsを学ぶケースが非常に多いため、「C# Forms」「csharp forms」「C# Windows Forms」のように呼ばれることがあります。

C#はプログラムの処理を書く言語です。一方、Windows Formsは画面を作る仕組みです。たとえば、フォームにButtonを配置し、そのボタンがクリックされたときの処理をC#で書きます。

C#
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("ボタンがクリックされました");
}

このように、Windows Formsでは「画面の部品」と「C#のコード」を組み合わせてアプリを作っていきます。

1-3. Windows Formsで作れるアプリの具体例

Windows Formsでは、次のようなWindows向けデスクトップアプリを作れます。

顧客情報を入力・検索する管理アプリ。
売上データを一覧表示する業務ツール。
CSVファイルを読み込んで加工するツール。
画像ファイルを選択して表示する簡単なビューア。
社内向けの設定ツールやチェックツール。
計算機、メモ帳、ToDo管理などの小規模アプリ。

特に、入力フォーム、一覧表示、ボタン操作、ファイル読み書きが中心のアプリは、Windows Formsと相性がよいです。DataGridViewを使えば表形式のデータを表示でき、TextBoxやComboBoxを使えば入力フォームも比較的簡単に作れます。

1-4. WPF・MAUI・コンソールアプリとの違い

C#でアプリを作るとき、Windows Forms以外にも複数の選択肢があります。

コンソールアプリは、黒い画面に文字を入力・表示する形式のアプリです。C#の文法や条件分岐、繰り返し、配列、クラスなどを学ぶには向いていますが、画面デザインを学ぶ用途には向いていません。

Windows Formsは、Windows専用のデスクトップUIアプリを簡単に作るための技術です。Visual Studioのデザイナーを使って、画面部品を配置しながら直感的に開発できます。Microsoft公式ドキュメントでも、Visual Studioのドラッグ&ドロップによるビジュアルデザイナーが用意されていると説明されています。Microsoft Learn+1

WPFは、より柔軟なUI表現やデータバインディングに強いWindows向けUIフレームワークです。見た目にこだわるアプリや、複雑な画面設計が必要な場合に向いています。Microsoft公式ドキュメントでは、WPFもWindows専用のUIフレームワークとして説明されています。Microsoft Learn

.NET MAUIは、Windows、Android、iOS、macOSなど複数環境向けのアプリ開発を目指す技術です。複数プラットフォーム対応が目的なら候補になりますが、初心者が最初にWindowsだけの小さなアプリを作るなら、Windows Formsの方が入りやすい場合があります。

1-5. 初心者がWindows Formsを選ぶメリットと注意点

初心者がWindows Formsを選ぶメリットは、画面を見ながら作れることです。フォームにボタンを置き、ボタンをダブルクリックして処理を書く、という流れがわかりやすいため、プログラムが画面上の操作と結びついて理解しやすくなります。

また、Label、Button、TextBox、ComboBox、DataGridViewなど、業務アプリでよく使う部品が最初からそろっています。小さなツールを作りながら、C#の変数、条件分岐、イベント処理、例外処理、ファイル操作などを学べます。

一方で注意点もあります。Windows Formsは基本的にWindows向けです。.NET自体はクロスプラットフォームの開発プラットフォームですが、Windows FormsはWindows専用のフレームワークとして扱われます。Microsoft+1

また、モダンで複雑なUI表現にはWPFなどの方が向いている場合があります。最初の学習や社内ツール、小規模アプリにはWindows Forms、本格的なUI設計や長期的な拡張性を重視する場合はWPFや他の技術も検討するとよいでしょう。

2. Windows Forms開発に必要な環境を準備する

2-1. Visual Studioをインストールする

csharp formsを始めるなら、まずVisual Studioをインストールします。Visual Studio Codeではなく、統合開発環境のVisual Studioを使うのが一般的です。Windows Formsはフォームデザイナーを使うことで学習しやすくなるため、初心者にはVisual Studioがおすすめです。

Visual StudioにはCommunity版があり、個人学習や小規模開発で使いやすいエディションです。インストール後、必要なワークロードを選択することで、C#やWindows Formsの開発に必要な機能をまとめて導入できます。

2-2. 必要なワークロードを選ぶ

Visual StudioでWindows Formsを開発するには、「.NET デスクトップ開発」ワークロードを選びます。Microsoft公式のWindows Formsチュートリアルでも、前提条件として.NET desktop developmentワークロードが案内されています。Microsoft Learn+1

インストール済みのVisual Studioにワークロードを追加したい場合は、Visual Studio Installerを開き、対象のVisual Studioを選んで「変更」をクリックします。その後、「.NET デスクトップ開発」にチェックを入れてインストールします。

このワークロードが入っていないと、Windows Forms Appのテンプレートが表示されない、フォームデザイナーが使えない、必要なコンポーネントが足りないといった問題が起きることがあります。

2-3. .NETと.NET Frameworkの違いを理解する

Windows Formsには、大きく分けて.NET版と.NET Framework版があります。Microsoft公式ドキュメントでも、Windows Formsには.NET上で動作する実装と、.NET Framework向けの実装があることが説明されています。Microsoft Learn+1

.NET Frameworkは、長く使われてきたWindows向けの開発基盤です。古い業務システムや既存アプリの保守では、今でも.NET FrameworkのWindows Formsが使われることがあります。

一方、現在新しく学習するなら、基本的には.NET版のWindows Formsを選ぶとよいでしょう。.NETは現在の開発の中心になっているプラットフォームで、今後の学習にもつなげやすいからです。ただし、会社や教材で.NET Frameworkを指定されている場合は、その指定に合わせます。

2-4. Windows Formsアプリのプロジェクトテンプレートを選ぶ

Visual Studioで新しいプロジェクトを作るときは、テンプレート検索で「Windows Forms」と入力します。C#で作る場合は、言語がC#になっていることを確認します。

よく似たテンプレートとして、次のようなものがあります。

Windows Forms App
Windows Forms App (.NET Framework)

初心者が新しく学習する場合は、通常「Windows Forms App」を選びます。.NET Frameworkを指定した教材や業務環境に合わせる場合は、「Windows Forms App (.NET Framework)」を選びます。

テンプレート名が似ているため、最初は迷いやすいですが、ポイントは「新規学習なら.NET版」「既存環境に合わせるなら.NET Framework版」です。

2-5. テンプレートが表示されないときの確認ポイント

Windows Formsのテンプレートが表示されない場合は、まずVisual Studio Installerで「.NET デスクトップ開発」ワークロードが入っているか確認します。

次に、プロジェクト作成画面のフィルターを確認します。言語がC#以外になっている、プラットフォームが別のものに絞り込まれている、プロジェクトタイプがWebやモバイルに限定されていると、Windows Formsテンプレートが見つからないことがあります。

検索欄に「Windows Forms」と入力し、言語を「C#」、プラットフォームを「Windows」、プロジェクトタイプを「デスクトップ」にすると見つけやすくなります。

それでも表示されない場合は、Visual Studioの更新、インストール済みコンポーネントの修復、またはVisual Studio Installerから不足機能の追加を試します。

3. C#でWindows Formsアプリを作る基本手順

3-1. 新しいWindows Formsプロジェクトを作成する

Visual Studioを起動したら、「新しいプロジェクトの作成」を選びます。検索欄に「Windows Forms」と入力し、C#の「Windows Forms App」を選択します。

プロジェクト名には、たとえば「SampleWinFormsApp」のような名前を付けます。保存場所を選び、使用する.NETのバージョンを選択して作成します。

プロジェクトが作成されると、最初にForm1という画面が表示されます。これがアプリのメイン画面になります。

3-2. Form1の役割を理解する

Form1は、Windows Formsアプリで最初に表示されるフォームです。フォームとは、ボタン、ラベル、入力欄などを配置するための画面の土台です。

プロジェクトを作成した直後は、Form1.csというファイルが用意されています。このファイルには、フォーム上で発生するイベント処理などを書いていきます。

Form1はクラスとして定義されています。

C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}

Form1 : Formは、Form1クラスがWindows FormsのFormクラスを継承していることを意味します。つまり、Form1はWindowsアプリの画面として動作するクラスです。

3-3. ツールボックスからコントロールを配置する

Windows Formsでは、画面に配置する部品を「コントロール」と呼びます。Button、Label、TextBox、ComboBox、CheckBoxなどが代表的なコントロールです。

Visual Studioのツールボックスを開き、使いたいコントロールをForm1上にドラッグ&ドロップします。配置したコントロールは、マウスで移動したり、サイズを変更したりできます。

たとえば、画面にTextBox、Button、Labelを配置すれば、文字を入力してボタンを押し、結果を表示する簡単なアプリを作れます。

3-4. Label・Button・TextBoxの基本的な使い方

Labelは、説明文や結果を表示するためのコントロールです。ユーザーが直接入力するものではなく、アプリ側から文字を表示するときに使います。

Buttonは、クリックされたときに処理を実行するためのコントロールです。検索、登録、保存、削除、計算など、ユーザーの操作のきっかけになります。

TextBoxは、ユーザーから文字入力を受け取るためのコントロールです。名前、メールアドレス、検索キーワード、数値などを入力してもらう場面で使います。

たとえば、TextBoxに入力された文字をLabelに表示するには、次のように書きます。

C#
private void button1_Click(object sender, EventArgs e)
{
label1.Text = textBox1.Text;
}

textBox1.Textで入力された文字を取得し、label1.Textに代入することで画面に表示できます。

3-5. プロパティウィンドウで見た目や名前を変更する

フォームやコントロールには、プロパティがあります。プロパティウィンドウを使うと、Text、Name、Size、Location、Font、BackColorなどを変更できます。

初心者が特に意識したいのは、TextプロパティとNameプロパティです。

Textプロパティは、画面に表示される文字です。ButtonのTextを「実行」にすれば、ボタン上に「実行」と表示されます。

Nameプロパティは、C#のコードからそのコントロールを参照するときの名前です。たとえば、TextBoxのNameをtxtNameにすると、コードではtxtName.Textのように書けます。

表示文字とコード上の名前は別物です。ここを混同すると、初心者はエラーでつまずきやすくなります。

3-6. 実行して画面にフォームを表示する

フォームを作成したら、Visual Studio上部の実行ボタン、またはF5キーでアプリを起動します。ビルドが成功すると、Form1がWindowsアプリとして表示されます。

実行して画面が表示されたら、TextBoxに文字を入力し、Buttonをクリックして、Labelの表示が変わるか確認します。

この「配置する」「プロパティを変える」「イベント処理を書く」「実行して確認する」という流れが、Windows Forms開発の基本サイクルです。

4. イベント処理を使ってボタン操作を実装する

4-1. Windows Formsのイベント駆動とは

Windows Formsは、イベント駆動型のプログラムです。イベント駆動とは、ユーザーの操作やシステムの動きに応じて処理が実行される仕組みです。

たとえば、次のようなものがイベントです。

ボタンがクリックされた。
フォームが開かれた。
TextBoxの文字が変更された。
ComboBoxの選択項目が変わった。
フォームが閉じられようとしている。

コンソールアプリでは上から順番に処理が進むイメージが強いですが、Windows Formsでは「何かが起きたときに、そのイベントに対応する処理が動く」と考えると理解しやすくなります。

4-2. ボタンクリックイベントを追加する

ボタンクリックイベントを追加する最も簡単な方法は、フォームデザイナー上でButtonをダブルクリックすることです。すると、Form1.csに次のようなイベントハンドラーが自動生成されます。

C#
private void button1_Click(object sender, EventArgs e)
{
}

この中に、ボタンがクリックされたときの処理を書きます。

C#
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("こんにちは");
}

実行してボタンをクリックすると、メッセージボックスが表示されます。

4-3. TextBoxに入力した文字をLabelに表示する

実用的な例として、TextBoxに入力された名前をLabelに表示してみます。

フォームにTextBox、Button、Labelを配置します。Buttonをダブルクリックして、次のコードを書きます。

C#
private void button1_Click(object sender, EventArgs e)
{
string name = textBox1.Text;
label1.Text = "こんにちは、" + name + "さん";
}

これで、TextBoxに「山田」と入力してボタンを押すと、Labelに「こんにちは、山田さん」と表示されます。

C#の文字列補間を使うと、次のようにも書けます。

C#
private void button1_Click(object sender, EventArgs e)
{
string name = textBox1.Text;
label1.Text = $"こんにちは、{name}さん";
}

Windows Formsでは、このような小さな処理を積み重ねてアプリを作っていきます。

4-4. イベントハンドラーのコードを書く場所

イベントハンドラーは、通常Form1.csに書きます。フォームデザイナーでButtonをダブルクリックすると、Form1.csに自動でメソッドが追加されます。

一方、Form1.Designer.csにもコードがありますが、ここは基本的に直接編集しません。Designer.csは、フォームデザイナーがコントロールの配置やプロパティ設定を管理するためのファイルです。

初心者のうちは、イベント処理や自分で書く処理はForm1.csに書く、と覚えておくと安全です。

4-5. よく使うイベント一覧

Windows Formsでよく使うイベントには、次のようなものがあります。

Clickは、Buttonなどがクリックされたときに発生します。最もよく使うイベントです。

Loadは、フォームが表示される前に発生します。初期値の設定やデータ読み込みに使います。

TextChangedは、TextBoxの文字が変更されたときに発生します。リアルタイム検索や入力チェックに使えます。

SelectedIndexChangedは、ComboBoxやListBoxの選択項目が変わったときに発生します。

FormClosingは、フォームが閉じられる直前に発生します。終了確認や保存確認に使えます。

KeyDownは、キーが押されたときに発生します。ショートカットキーやEnterキー操作に使えます。

5. Windows Formsでよく使うコントロールの基本

5-1. TextBoxで文字入力を受け取る

TextBoxは、ユーザーから文字を入力してもらうための基本コントロールです。入力された文字はTextプロパティから取得できます。

C#
string input = textBox1.Text;

数値を入力してもらう場合でも、TextBoxから取得できる値は文字列です。そのため、計算に使う場合はintやdoubleに変換する必要があります。

C#
int age = int.Parse(textBox1.Text);

ただし、数字以外が入力されるとエラーになるため、実用的にはTryParseを使う方が安全です。

C#
if (int.TryParse(textBox1.Text, out int age))
{
label1.Text = $"年齢は{age}歳です";
}
else
{
MessageBox.Show("数値を入力してください");
}

5-2. Buttonで処理を実行する

Buttonは、ユーザーが何かの処理を実行するためのきっかけになります。登録ボタン、検索ボタン、保存ボタン、削除ボタンなど、アプリの操作に欠かせません。

Buttonを配置したら、Textプロパティを「検索」「保存」などに変更すると、ユーザーにとってわかりやすくなります。NameプロパティもbtnSearchbtnSaveのようにしておくと、コードが読みやすくなります。

C#
private void btnSave_Click(object sender, EventArgs e)
{
MessageBox.Show("保存しました");
}

5-3. Labelで結果や説明文を表示する

Labelは、固定の説明文や処理結果を表示するために使います。入力欄の横に「名前」「年齢」「住所」などの説明を置く場合にも便利です。

コードから表示内容を変えるには、Textプロパティに文字列を代入します。

C#
labelResult.Text = "処理が完了しました";

Labelは簡単なコントロールですが、ユーザーに現在の状態や結果を伝える重要な役割を持ちます。

5-4. ComboBox・CheckBox・RadioButtonの使い分け

ComboBoxは、複数の選択肢から1つを選ばせたいときに使います。都道府県、カテゴリ、部署、ステータスなどの選択に向いています。

C#
comboBox1.Items.Add("東京");
comboBox1.Items.Add("大阪");
comboBox1.Items.Add("福岡");

CheckBoxは、オン・オフを選ばせたいときに使います。複数選択が可能な項目にも向いています。たとえば「メールで通知する」「利用規約に同意する」のような項目です。

C#
if (checkBox1.Checked)
{
MessageBox.Show("チェックされています");
}

RadioButtonは、複数の選択肢の中から1つだけ選ばせたいときに使います。性別、支払い方法、表示モードなど、同時に複数選ぶべきではない項目に向いています。

5-5. ListBox・DataGridViewで一覧データを表示する

ListBoxは、文字列の一覧を表示するためのコントロールです。項目数がそれほど多くなく、単純な一覧を見せたいときに使いやすいです。

C#
listBox1.Items.Add("りんご");
listBox1.Items.Add("みかん");
listBox1.Items.Add("バナナ");

DataGridViewは、表形式のデータを表示するためのコントロールです。顧客一覧、商品一覧、売上一覧など、列と行を持つデータを扱う場合に便利です。

C#
dataGridView1.Columns.Add("Name", "名前");
dataGridView1.Columns.Add("Age", "年齢");

dataGridView1.Rows.Add("山田", 30);
dataGridView1.Rows.Add("佐藤", 25);

業務アプリを作る場合、DataGridViewは非常によく使われます。

5-6. MessageBoxでメッセージを表示する

MessageBoxは、ユーザーにメッセージを表示するための機能です。完了通知、エラー通知、確認ダイアログなどに使います。

C#
MessageBox.Show("保存しました");

タイトルやアイコンを指定することもできます。

C#
MessageBox.Show(
"入力内容を確認してください",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);

確認ダイアログとして使う場合は、ユーザーの選択結果を受け取れます。

C#
DialogResult result = MessageBox.Show(
"終了しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);

if (result == DialogResult.Yes)
{
this.Close();
}

6. 初心者がつまずきやすいWindows Formsのコード構成

6-1. Form1.csとForm1.Designer.csの違い

Windows Formsのプロジェクトでは、Form1.csとForm1.Designer.csという似た名前のファイルがあります。

Form1.csは、開発者が主にコードを書く場所です。ボタンクリック時の処理、入力チェック、計算、ファイル読み書きなどはここに書きます。

Form1.Designer.csは、フォームデザイナーが自動生成するコードを管理する場所です。どのコントロールを配置したか、サイズや位置はどうなっているか、イベントとメソッドがどう関連付いているかなどが書かれています。

初心者が混乱しやすいポイントですが、基本的にはForm1.csを編集し、Form1.Designer.csは直接触らないと覚えておきましょう。

6-2. InitializeComponentとは何か

Form1.csには、次のようなコードがあります。

C#
public Form1()
{
InitializeComponent();
}

InitializeComponent()は、フォーム上のコントロールを作成し、配置し、プロパティを設定するためのメソッドです。この中身はForm1.Designer.csにあります。

このメソッドが呼び出されないと、フォーム上に配置したButtonやTextBoxが作成されません。そのため、InitializeComponent();を削除したり、呼び出し前にコントロールを使ったりすると、画面が正しく表示されない原因になります。

6-3. Program.csとApplication.Runの役割

Windows Formsアプリには、Program.csというファイルもあります。ここには、アプリの開始地点が書かれています。

C#
Application.Run(new Form1());

このコードは、Form1を起動してアプリを開始するという意味です。つまり、Form1が最初に表示されるのは、Program.csでForm1を起動しているからです。

もし別のフォームを最初に表示したい場合は、ここで指定するフォームを変更します。ただし、初心者のうちはProgram.csを頻繁に変更する必要はありません。

6-4. コントロール名と変数名の関係

フォームに配置したコントロールには、Nameプロパティがあります。このNameが、C#コードから参照するときの変数名になります。

たとえば、TextBoxのNameがtextBox1なら、コードでは次のように書きます。

C#
string value = textBox1.Text;

NameをtxtUserNameに変更した場合は、コードでも次のように書きます。

C#
string value = txtUserName.Text;

画面に表示される文字はTextプロパティ、コードから使う名前はNameプロパティです。この違いを理解しておくと、CS0103などのエラーを減らせます。

6-5. Designer.csを直接編集してはいけない理由

Form1.Designer.csは自動生成されるファイルです。Visual Studioのフォームデザイナーでコントロールを追加したり、プロパティを変更したりすると、Designer.csの内容も自動で更新されます。

そのため、Designer.csを直接編集すると、フォームデザイナーとの整合性が崩れることがあります。最悪の場合、デザイナーが開けなくなったり、コントロールが表示されなくなったりします。

イベント処理や自分で追加する処理は、Form1.csに書きましょう。コントロールの配置や見た目は、基本的にフォームデザイナーとプロパティウィンドウから変更するのが安全です。

7. csharp formsでよくある悩みと解決方法

7-1. フォームデザイナーが開かない

フォームデザイナーが開かない場合は、まずプロジェクトがWindows Forms Appとして作成されているか確認します。コンソールアプリとして作成していると、フォームデザイナーは使えません。

次に、Form1.csにコンパイルエラーがないか確認します。フォームのクラスにエラーがあると、デザイナーがフォームを読み込めないことがあります。

また、Form1.Designer.csを直接編集して構造を壊してしまった場合も、デザイナーが開けなくなることがあります。直前に編集した箇所を戻し、エラー一覧を確認しましょう。

7-2. ツールボックスが表示されない

ツールボックスが表示されない場合は、Visual Studioのメニューから「表示」→「ツールボックス」を選びます。ショートカットキーで表示できる場合もあります。

それでもコントロールが表示されない場合は、フォームデザイナーが開かれているか確認します。コード画面だけを開いていると、Windows Forms用のコントロールが表示されないことがあります。

また、「.NET デスクトップ開発」ワークロードが不足している場合もあるため、Visual Studio Installerでインストール内容を確認します。

7-3. ボタンを押しても処理が動かない

ボタンを押しても処理が動かない場合は、Clickイベントとイベントハンドラーが関連付いているか確認します。

フォームデザイナーでButtonを選択し、プロパティウィンドウの稲妻アイコンを開きます。Clickの欄に、実行したいメソッド名が入っているか確認しましょう。

たとえば、次のようなメソッドを書いていても、Clickイベントに関連付いていなければ実行されません。

C#
private void btnRun_Click(object sender, EventArgs e)
{
MessageBox.Show("実行されました");
}

不安な場合は、Buttonをダブルクリックして自動生成されたイベントハンドラーに処理を書くのが簡単です。

7-4. コントロール名がコードから見つからない

コードにtextBox1と書いたのに「現在のコンテキストに存在しません」というエラーが出る場合、Nameプロパティが違っている可能性があります。

たとえば、TextBoxのNameをtxtNameに変更したなら、コードでもtxtName.Textと書く必要があります。

C#
string name = txtName.Text;

また、別のフォームにあるコントロールを、今開いているフォームのコードから直接参照しようとしている場合もエラーになります。フォーム間で値を渡す場合は、プロパティやコンストラクターを使う必要があります。

7-5. CS0103やNullReferenceExceptionが出る

CS0103は、指定した名前が現在の場所で見つからないときに出るエラーです。コントロール名の間違い、変数名のスペルミス、宣言場所の違いなどが原因です。

C#
labelResult.Text = textBoxName.Text;

このコードでCS0103が出る場合は、labelResulttextBoxNameというNameのコントロールが本当に存在するか確認します。

NullReferenceExceptionは、まだ作られていないもの、またはnullになっているものを使おうとしたときに出ます。Windows Formsでは、InitializeComponentの前にコントロールを使った場合や、別フォームのインスタンスを正しく作成していない場合に発生しやすいです。

C#
Form2 form2 = new Form2();
form2.Show();

フォームやオブジェクトを使う前に、正しくnewしているか確認しましょう。

7-6. フォームのサイズや配置が崩れる

フォームのサイズや配置が崩れる場合は、AnchorやDockプロパティを確認します。

Anchorは、フォームサイズが変わったときに、コントロールをどの端に固定するかを指定するプロパティです。たとえば、右下にボタンを固定したい場合は、右と下にAnchorを設定します。

Dockは、コントロールをフォームの上、下、左、右、全体に貼り付けるためのプロパティです。PanelやDataGridViewを画面いっぱいに広げたい場合に便利です。

固定サイズのフォームなら、FormBorderStyleやMaximizeBoxを調整して、ユーザーがサイズ変更できないようにする方法もあります。

7-7. ビルドは成功するのに画面が表示されない

ビルドは成功するのに画面が表示されない場合は、Program.csのApplication.Runを確認します。

C#
Application.Run(new Form1());

ここで正しいフォームを起動しているか確認しましょう。

また、フォームのLoadイベントなどでClose()を呼んでいると、表示直後に閉じてしまう場合があります。例外が発生しているのに握りつぶしている場合もあるため、try-catchの中で何も表示していないコードがないかも確認します。

8. 複数フォームを扱う基本

8-1. 新しいフォームを追加する

Windows Formsアプリでは、複数のフォームを使えます。たとえば、メイン画面、設定画面、詳細画面、検索画面などに分けることができます。

新しいフォームを追加するには、ソリューションエクスプローラーでプロジェクトを右クリックし、「追加」→「Windows フォーム」を選びます。名前はForm2.csSettingsForm.csなど、役割がわかる名前にするとよいでしょう。

8-2. 別フォームを表示する

別フォームを表示するには、表示したいフォームのインスタンスを作成し、Showメソッドを呼びます。

C#
private void btnOpen_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}

これで、ボタンをクリックしたときにForm2が表示されます。

8-3. ShowとShowDialogの違い

フォームを表示する方法には、ShowとShowDialogがあります。

Showは、別フォームを表示したあとも、元のフォームを操作できます。

C#
Form2 form2 = new Form2();
form2.Show();

ShowDialogは、表示したフォームを閉じるまで、元のフォームを操作できません。設定画面や確認画面のように、先に入力を完了してほしい場合に使います。

C#
Form2 form2 = new Form2();
form2.ShowDialog();

入力ダイアログや確認画面ではShowDialog、サブウィンドウのように並行して操作したい画面ではShowを使うと考えるとわかりやすいです。

8-4. フォーム間で値を渡す方法

フォーム間で値を渡す方法はいくつかあります。基本的な方法は、コンストラクターで渡す方法です。

Form2側に、値を受け取るコンストラクターを作ります。

C#
public partial class Form2 : Form
{
public Form2(string message)
{
InitializeComponent();
label1.Text = message;
}
}

Form1側から、Form2を作るときに値を渡します。

C#
private void btnOpen_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(textBox1.Text);
form2.ShowDialog();
}

この方法なら、Form1のTextBoxに入力された文字をForm2に表示できます。

8-5. フォームを閉じる処理とアプリ終了の違い

フォームを閉じるには、Close()を使います。

C#
this.Close();

ただし、メインフォームを閉じるとアプリ全体が終了します。一方、サブフォームを閉じるだけなら、メインフォームは残ります。

アプリ全体を明示的に終了したい場合は、Application.Exit()を使うこともあります。

C#
Application.Exit();

ただし、むやみにApplication.Exitを使うと、開いているフォームがまとめて閉じられるため、保存確認などが必要なアプリでは注意が必要です。

9. 実用的なWindows Formsアプリに近づける機能

9-1. 入力チェックを実装する

実用的なアプリでは、ユーザーが正しい値を入力するとは限りません。空欄、数字以外の文字、範囲外の値などをチェックする必要があります。

C#
private void btnSubmit_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtName.Text))
{
MessageBox.Show("名前を入力してください");
return;
}

MessageBox.Show("登録しました");
}

数値チェックにはTryParseを使います。

C#
if (!int.TryParse(txtAge.Text, out int age))
{
MessageBox.Show("年齢は数値で入力してください");
return;
}

入力チェックを入れるだけで、アプリの使いやすさと安定性は大きく向上します。

9-2. ファイルを読み書きする

Windows Formsでは、TextBoxに入力された内容をファイルに保存したり、ファイルから読み込んで表示したりできます。

C#
File.WriteAllText("memo.txt", textBox1.Text);
MessageBox.Show("保存しました");

読み込みは次のように書けます。

C#
if (File.Exists("memo.txt"))
{
textBox1.Text = File.ReadAllText("memo.txt");
}

ファイル操作を使うと、メモ帳、設定保存、ログ出力、CSV読み込みなどの実用的なアプリに発展させられます。

9-3. 簡単な検索機能を作る

ListBoxにある項目から、TextBoxに入力された文字を含むものだけを表示する簡単な検索機能を作れます。

C#
private List<string> items = new List<string>
{
"りんご",
"みかん",
"バナナ",
"ぶどう"
};

private void btnSearch_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();

string keyword = txtKeyword.Text;

foreach (string item in items)
{
if (item.Contains(keyword))
{
listBox1.Items.Add(item);
}
}
}

このような検索処理は、顧客一覧や商品一覧などの実用アプリにも応用できます。

9-4. DataGridViewで表形式のデータを扱う

DataGridViewを使うと、表形式のデータを画面に表示できます。簡単な例では、列を追加して行を追加します。

C#
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.Columns.Add("Id", "ID");
dataGridView1.Columns.Add("Name", "名前");
dataGridView1.Columns.Add("Price", "価格");

dataGridView1.Rows.Add(1, "ノート", 120);
dataGridView1.Rows.Add(2, "ペン", 80);
dataGridView1.Rows.Add(3, "消しゴム", 60);
}

DataGridViewは、一覧表示、編集、選択、並び替えなど、業務アプリでよく使う機能の土台になります。最初は手動で行を追加するところから始め、慣れてきたらCSVやデータベースと連携するとよいでしょう。

9-5. 例外処理でエラーに強いアプリにする

ファイル読み込みや数値変換など、エラーが起きる可能性のある処理には例外処理を入れます。

C#
try
{
string text = File.ReadAllText("data.txt");
textBox1.Text = text;
}
catch (Exception ex)
{
MessageBox.Show("ファイルの読み込みに失敗しました: " + ex.Message);
}

例外処理を入れることで、アプリが突然終了するのを防ぎ、ユーザーにわかりやすいメッセージを表示できます。

ただし、すべての例外を何もせず無視するのは避けましょう。原因がわからなくなり、バグの発見が難しくなります。

9-6. 見やすいUIに整える基本ルール

Windows Formsで見やすいUIを作るには、まず余白をそろえることが大切です。コントロール同士の間隔がバラバラだと、操作しにくい画面になります。

次に、ボタン名は具体的にします。「OK」だけでなく、「検索」「保存」「登録」「削除」のように、何が起こるのかがわかる文言にします。

入力欄にはLabelを付け、何を入力すればよいかを明確にします。エラーが起きたときは、どの項目を直せばよいかがわかるメッセージを表示します。

また、重要なボタンを右下に配置する、関連する項目をGroupBoxでまとめる、一覧はDataGridViewで見やすくするなど、ユーザーが迷わない画面を意識しましょう。

10. Windows Formsを学ぶときのおすすめ学習順

10-1. まずは小さなサンプルアプリを作る

Windows Formsを学ぶときは、いきなり大きなアプリを作ろうとせず、小さなサンプルから始めるのがおすすめです。

最初は、TextBoxに入力した文字をLabelに表示するアプリで十分です。次に、足し算アプリ、メモ帳アプリ、簡単なToDoリストなどに進むと、少しずつ実用的な処理を学べます。

小さなアプリを完成させることで、フォーム作成、コントロール配置、イベント処理、実行確認の基本サイクルが身につきます。

10-2. コントロールとイベント処理に慣れる

次に、よく使うコントロールに慣れましょう。Button、TextBox、Label、ComboBox、CheckBox、RadioButton、ListBox、DataGridViewを一通り触ってみると、Windows Formsでできることのイメージが広がります。

同時に、Click、Load、TextChanged、SelectedIndexChangedなどのイベントも試します。Windows Formsはイベント駆動なので、イベント処理に慣れることが上達の近道です。

10-3. エラー文を読んで原因を切り分ける

初心者のうちは、エラーが出ると難しく感じます。しかし、エラー文には原因を探すヒントが書かれています。

CS0103なら、名前が見つからない。
NullReferenceExceptionなら、nullのものを使おうとしている。
FormatExceptionなら、文字列を数値などに変換できない。
FileNotFoundExceptionなら、指定したファイルが見つからない。

エラー文を読み、どの行で起きているかを確認し、変数名、コントロール名、入力値、ファイルパスなどを順番に確認しましょう。

10-4. データ保存や検索など実用機能に進む

基本に慣れたら、データ保存や検索機能に進みます。最初はテキストファイルやCSVファイルで十分です。

たとえば、次のようなアプリを作ると実践力がつきます。

メモを保存できるメモ帳アプリ。
商品名と価格を一覧表示する管理アプリ。
CSVを読み込んでDataGridViewに表示するアプリ。
キーワードで一覧を絞り込む検索アプリ。
入力チェック付きの登録フォーム。

こうしたアプリを作ると、Windows Formsだけでなく、C#の基本文法やデータ処理も自然に身につきます。

10-5. Windows Formsの次に学ぶべき技術

Windows Formsに慣れたら、次の技術に進むと学習の幅が広がります。

まず、C#のクラス設計を学びましょう。すべての処理をForm1.csに書くと、アプリが大きくなったときに管理しにくくなります。データを表すクラス、処理を担当するクラスに分けると、保守しやすくなります。

次に、ファイル操作、JSON、CSV、データベースを学ぶと、実用的なアプリを作りやすくなります。

さらにUI技術を深めたい場合は、WPFを学ぶのもよい選択です。Windows Formsでイベント処理や画面付きアプリの基本を理解してからWPFに進むと、違いを理解しやすくなります。

11. csharp formsに関するよくある質問

11-1. C# FormsとWindows Formsは同じ意味?

多くの場合、「C# Forms」は「C#で作るWindows Formsアプリ」を指して使われています。ただし、正式名称としてはWindows Forms、またはWinFormsと呼ぶのが一般的です。

検索では「csharp forms」「C# Forms」「C# Windows Forms」「WinForms C#」など、さまざまな表記が使われますが、初心者が知りたい内容はほとんど同じです。

11-2. Windows Formsは今から学んでもよい?

Windows Formsは、今から学んでも意味があります。特に、C#で画面付きアプリを初めて作る人、Windows向けの小さな業務ツールを作りたい人、既存のWinFormsアプリを保守する必要がある人には役立ちます。

Microsoft公式ドキュメントでも、Windows FormsはWindowsデスクトップアプリを作るためのUIフレームワークとして案内されており、.NET向けのWindows Formsに関する情報も継続して提供されています。Microsoft Learn+1

ただし、最新のUI表現や複雑な画面設計を重視するなら、WPFなども学習候補に入ります。最初の一歩としてWindows Formsを学び、その後にWPFやWebアプリへ進む流れは十分に有効です。

11-3. Visual Studio CodeでもWindows Formsは作れる?

C#のコード自体はVisual Studio Codeでも編集できます。しかし、Windows Formsを初心者が学ぶ場合は、Visual Studioの方が圧倒的に扱いやすいです。

理由は、フォームデザイナーが使えるからです。Windows Formsは画面にコントロールを配置しながら作る場面が多いため、Visual Studioのデザイナー機能を使う方が学習しやすく、作業も効率的です。Visual StudioのWindows Forms Designerは、フォームにコントロールを追加し、配置し、イベントのコードを書くための機能として説明されています。Microsoft Learn

11-4. MacでWindows Formsアプリは作れる?

Windows FormsはWindows向けのUIフレームワークです。そのため、Mac上でそのままWindows Formsアプリを作って実行する学習環境としては向いていません。.NET自体はmacOS、Windows、Linuxなどをサポートするクロスプラットフォームの開発プラットフォームですが、Windows FormsはWindows専用のフレームワークです。Microsoft+1

MacでC#を学びたい場合は、コンソールアプリ、Webアプリ、.NET MAUIなどを検討できます。Windows Formsを学びたい場合は、Windows環境を用意するのが基本です。

11-5. .NETと.NET Frameworkのどちらを選ぶべき?

新しくWindows Formsを学ぶなら、基本的には.NET版のWindows Formsを選ぶのがおすすめです。現在のC#学習や今後の開発につなげやすいからです。

一方、会社の既存システムが.NET Frameworkで作られている場合や、教材が.NET Frameworkを前提にしている場合は、.NET Framework版を選んでも問題ありません。

選び方の目安は、次の通りです。

新規学習なら.NET版。
新規開発でも特別な理由がなければ.NET版。
古い業務アプリの保守なら.NET Framework版。
教材や職場の指定があるなら指定に合わせる。

11-6. WPFとWindows Formsはどちらが初心者向け?

初心者が最初に画面付きアプリを作るなら、Windows Formsの方が入りやすいことが多いです。フォームにコントロールを配置し、ボタンをダブルクリックして処理を書く流れがわかりやすいからです。

一方、WPFはデザインの自由度やデータバインディングに強く、より本格的なUIアプリを作るのに向いています。ただし、XAMLやデータバインディングなど、最初に覚える概念が増えます。

まずWindows Formsで、フォーム、コントロール、イベント処理、入力チェック、ファイル操作を学び、その後にWPFへ進むと、C#の画面開発を段階的に理解できます。

まとめ

csharp formsで調べている人がまず理解すべきなのは、C#でWindows向けの画面付きアプリを作る代表的な方法がWindows Formsであるということです。Windows Formsは、Visual Studioのフォームデザイナーを使って、Button、TextBox、Labelなどのコントロールを配置し、イベント処理をC#で書くことでアプリを作ります。

開発を始めるには、Visual Studioをインストールし、「.NET デスクトップ開発」ワークロードを追加します。新しいプロジェクトではWindows Forms Appを選び、Form1にコントロールを配置して、ボタンクリックなどのイベント処理を書いていきます。

初心者がつまずきやすいポイントは、Form1.csとForm1.Designer.csの違い、InitializeComponentの役割、NameプロパティとTextプロパティの違い、イベントハンドラーの関連付け、CS0103やNullReferenceExceptionなどのエラーです。これらを理解すると、Windows Forms開発はかなり進めやすくなります。

最初は、入力した文字を表示するだけの小さなアプリで十分です。そこから、入力チェック、ファイル保存、検索、DataGridViewでの一覧表示、複数フォームの利用へ進むことで、実用的なWindows Formsアプリを作れるようになります。C#で画面付きアプリを作りたいなら、Windows Formsは今でも学習しやすい入口です。