Skip to content

第18章 Windowsフォームアプリ開発の準備

この章では、C# の学習を Windows フォームアプリ に広げます。 ここまで、コンソールアプリで C# の文法とクラス(オブジェクト指向)の基本を学んできました。 本章では、画面に部品を配置して操作するアプリ に触れ、書籍とともに進めるための準備を行います。

Windows フォーム編では、次の書籍を併用します。

作って覚える Visual C# 2022 デスクトップアプリ超入門

(以下、本テキストでは「書籍」と表記します。)

書籍は 手を動かしながら覚える 構成になっています。本テキストでは書籍の内容をそのまま転記せず、研修固有の補足や体験指示 を中心に書きます。 書籍と本テキストを 両方手元に開いて 進めてください。


本章は オブジェクト指向(第 7〜15 章)と並行して読める よう設計しています。 コンソールアプリだけで C# を学んでいると「画面のあるアプリ」のイメージが掴みづらいため、オブジェクト指向の途中で本章を挟むと、後述の 18-3「画面部品もオブジェクトである」が腑に落ちやすくなります。

タイミング読み進め方補足
第 7 章(クラス基礎)後全節読めますForm1 : Form の継承の話は「Form クラスの機能を引き継いでいる」程度で十分
第 10 章(クラス掘り下げ)後おすすめプロパティ理解が深まっているので 18-3 がもっとも腑に落ちる
第 13 章(継承)後完全に読み解けるpublic partial class Form1 : Form の継承構造が明確に分かる
第 17 章(DB 接続)後当初想定の章順章番号どおりに読む読み方

並行受講では、講師が指示するタイミングで本章を挟みます。受講者は自分のペースで読み進めて構いません。 本章は提出を伴わない体験・確認章 です(詳しくは「体験課題」のセクションを参照)。


この章でできるようになること

Section titled “この章でできるようになること”

この章を終えると、次のことができるようになります。

  • Windows フォームアプリとは何かを説明できる
  • コンソールアプリと Windows フォームアプリの違いを説明できる
  • イベント駆動の考え方を説明できる
  • 画面部品が C# のオブジェクトであることを、第 7〜15 章のクラス知識と結びつけて説明できる
  • Visual Studio 2022 で Windows フォームアプリのプロジェクトを作成し、実行できる
  • Visual Studio の主な画面(フォームデザイナー、プロパティウィンドウ、ツールボックス)を確認できる
  • 自動生成された Program.csForm1.cs の役割を大まかに把握できる

書籍の次の範囲を参照します。

範囲内容
Chapter 1プログラミングの基礎
Chapter 2Visual Studio Community 2022 の基本操作

書籍 Chapter 1 では、Windows 用アプリケーションと C# の位置づけを確認します。 書籍 Chapter 2 では、Visual Studio の起動・画面構成・プロジェクト作成・実行・保存などを実際に手を動かして確認します。

本テキスト側の役割

操作手順や画面例は 書籍 に書かれています。 本テキストでは、研修固有のポイント(これまでに学んだ C# 知識との接続、研修での扱い方、体験指示)に絞って記述します。


項目内容
開発環境Visual Studio 2022
プロジェクト種類Windows フォーム アプリ(コンソール アプリではない)
対象フレームワーク.NET 8
プロジェクト名書籍 Chapter 2 の指示に従う(既定では WinFormsApp1)

csproj の Nullable について

Windows フォームのプロジェクトでも、本研修は引き続き <Nullable>disable</Nullable> に設定します。 プロジェクト作成後、(プロジェクト名).csproj を開いて変更してください(第 1 章「1-1 プロジェクトを作成する」参照)。


作業を始める前に、次の内容を確認してください。

  • 直前の章までの提出が一段落している(並行受講の場合は講師の指示に従う)
  • 書籍が手元にある
  • Visual Studio 2022 で「Windows フォーム アプリ」テンプレートが選択できる(インストール済み)

ここまでの C# 学習は、コンソールアプリ が中心でした。 コンソールアプリは、文法やオブジェクト指向の基礎を学ぶのに向いています。

一方、業務システムでは 画面で操作するアプリ が多くを占めます。

社員検索画面
商品登録画面
売上一覧画面

Windows フォームアプリは、画面部品(ボタン、テキストボックス、ラベル、DataGridView など)を配置して作ります。 画面部品の使い方や Visual Studio の操作は、書籍が「作って覚える」スタイル で詳しく解説しているため、ここからは書籍を主体に進めます。


18-2 コンソールアプリと Windows フォームアプリの違い

Section titled “18-2 コンソールアプリと Windows フォームアプリの違い”
観点コンソールアプリWindows フォームアプリ
入出力文字を入力・文字を表示ボタン・テキストボックス・ラベルなどの画面部品
処理の流れ上から順に実行利用者の操作(クリックなど)をきっかけに動く
主に使う VS の画面コードエディターフォームデザイナー + コードエディター
プロジェクトテンプレート「コンソール アプリ」「Windows フォーム アプリ」

利用者の操作をきっかけに処理が動く考え方を イベント駆動 といいます。

コンソールアプリ
起動 → 入力 → 計算 → 表示 → 終了
Windows フォームアプリ
起動 → 画面表示 → (待機) → ボタンクリック → 処理実行 → (待機) → ...

「待機」の状態で利用者の操作を待っているのが、Forms アプリの大きな特徴です。


18-3 画面部品もオブジェクトである

Section titled “18-3 画面部品もオブジェクトである”

Windows フォームアプリでは、画面に配置した部品を C# のコードから操作します。

label1.Text = "こんにちは";
label1.BackColor = Color.White;
button1.Enabled = false;

これは、第 7 章以降で学んだ次の形そのものです。

オブジェクト名.プロパティ名 = 値;
オブジェクト名.メソッド名();
第 7〜15 章で学んだものWindows フォームでの例
クラス・インスタンスForm クラス、Label クラスのインスタンス
プロパティTextBackColorEnabled
メソッドShow()Close()Focus()
イベントClickLoadTextChanged(これから学ぶ)
継承public partial class Form1 : Form(Form クラスを継承)
名前空間using System.Windows.Forms; (暗黙的に使われる)

つまり、Windows フォーム編はこれまでに学んだオブジェクト指向の集大成 とも言えます。 これまで学んだクラス・継承・プロパティ・メソッドの知識が、画面部品操作にそのまま活きます。


18-4 Forms プロジェクトの自動生成ファイル

Section titled “18-4 Forms プロジェクトの自動生成ファイル”

書籍 Chapter 2 で Windows フォームアプリのプロジェクトを作ると、いくつかのファイルが自動生成されます。 それぞれの役割を、第 7 章までに学んだ知識で大まかに読み解いておきます。

ファイル役割
Program.csアプリの起動口(Main メソッドがある)
Form1.csフォームのコード(イベントハンドラーなどを書く)
Form1.Designer.csフォーム上の部品配置を表すコード(基本的に手で書かない)
(プロジェクト名).csprojプロジェクト設定
namespace WinFormsApp1
{
internal static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

これまでのコンソールアプリと違う点が 3 つあります。

違い意味
static class Programこのクラス自体も static(状態を持たない)
[STAThread]Windows フォームに必要な属性。深く意識しない
Main() の引数なしForms ではコマンドライン引数を使うことは少ない
Application.Run(new Form1());Form1 を作って画面を表示し、メッセージループに入る

本研修では、これらの自動生成コードを大きく書き換える必要はありません。 Forms 編では、主に Form1.cs(後でフォーム名を変えると別名)の中身を書きます。


namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

partial というキーワードが付いています。これは、1 つのクラスを複数のファイルに分けて定義 できる仕組みで、Form1.csForm1.Designer.cs で 1 つの Form1 クラスを構成します。

ファイルpartial で書かれる内容
Form1.cs自分で書くロジック(イベントハンドラーなど)
Form1.Designer.csフォーム上の部品配置(自動生成、手で触らない)

Form1 : Form は、第 13 章で学んだ 継承 です。Form 親クラスを継承して、自分のフォームを作っています。


自動生成された Program.csブロック形式 の namespace で書かれています。

namespace WinFormsApp1
{
internal static class Program
{
...
}
}

第 7 章以降のコンソールアプリでは、本研修ではファイルスコープ namespace(namespace XXX;)を使ってきました。 Windows フォーム編では、自動生成されたコードに合わせて、ブロック形式のままにしてください。 書籍のコード例もブロック形式のため、こちらの方が書籍と整合します。


18-5 Visual Studio で使う主な画面

Section titled “18-5 Visual Studio で使う主な画面”

Windows フォームアプリでは、コンソールアプリと比べて使う画面が増えます。

画面役割
ソリューションエクスプローラープロジェクト内のファイルを確認・選択
フォームデザイナー画面を視覚的に設計する(部品をドラッグ配置)
プロパティウィンドウ選択中のフォーム/部品の設定を変更
ツールボックス配置できる部品の一覧
コードエディターC# コードを書く
エラー一覧ビルドエラーを確認

書籍 Chapter 2 で各画面の場所と使い方を学んでください。 分からなくなったときに どこを開けばよいか を覚えるのが、この章のポイントです。


つまずき原因対応
プロジェクトテンプレートで「コンソール アプリ」を選んでしまう名前が似ている「Windows フォーム アプリ」 を選ぶ
フォームデザイナーが表示されないコードビューになっているソリューションエクスプローラーで Form1.cs をダブルクリック
プロパティウィンドウが見当たらない閉じてしまったメニュー「表示」 → 「プロパティウィンドウ」
Form1.Designer.cs を直接編集してエラー自動生成ファイルを手で書いたデザイナーから操作する。直接編集しない
partial の意味が分からない1 クラスを複数ファイルに分ける機能デザイナー側と自分で書く側を分けている、と理解
Nullable 警告が大量に出るcsproj が disable になっていないcsproj で <Nullable>disable</Nullable> に変更

  • Windows フォームアプリとコンソールアプリの違いを説明できる
  • イベント駆動の考え方を説明できる
  • 画面部品がオブジェクトであることを、オブジェクト名.プロパティ名 の形で説明できる
  • Visual Studio で Windows フォームアプリのプロジェクトを作成できる
  • フォームを実行して表示できる
  • フォームデザイナー・プロパティウィンドウ・ツールボックスを開ける
  • Program.csForm1.cs の役割を大まかに説明できる
  • partial でクラスが分かれている意味を説明できる(Form1.csForm1.Designer.cs)
  • Form1 : Form が第 13 章で学んだ継承であることを説明できる

研修の進め方によっては、隣の人またはチーム内で説明確認を行います。

次の内容を、自分の言葉で説明してください。

  1. コンソールアプリと Windows フォームアプリの違いは何ですか。
  2. イベント駆動とはどのような考え方ですか。
  3. label1.Text = "こんにちは"; は、これまでに学んだどの考え方とつながっていますか。
  4. Visual Studio で Forms 開発に使う主な画面を 3 つ以上挙げてください。
  5. Form1.Designer.cs を直接編集してはいけないのはなぜですか。
  6. Form1Form を継承しているのは、どんな利点がありますか。

本章の課題は 「Visual Studio で Windows フォーム開発を体験してみる」 ことが目的です。 コードを書いて提出するタイプではないため、Git への提出は不要 です(本格的な提出は第 19 章から再開します)。

書籍 Chapter 1〜2 を参照しながら、自分のペースで進めてください。 細かい操作手順は書籍に書かれているので、書籍を手元に開いて進めてください。

必須課題と発展課題の位置づけ

「必須」「発展」と表記していますが、本章ではいずれも 提出を伴わない体験課題 です。 必須課題は「最低限、ここまでは触れておきたい」基本体験、発展課題は「余裕があれば試してほしい」追加体験という位置づけです。


まずは、全員が必須課題に取り組んでください。


課題 18-1 書籍 Chapter 1・2 を読む

Section titled “課題 18-1 書籍 Chapter 1・2 を読む”

書籍の Chapter 1・2 を、自分のペースで読んでください。

Chapter 1 で確認すること

  • プログラムとは何か
  • Windows 用アプリケーションの特徴
  • C# と .NET の位置づけ

Chapter 2 で確認すること

  • Visual Studio の起動方法
  • 画面構成(フォームデザイナー、プロパティウィンドウ、ツールボックス、ソリューションエクスプローラー)
  • プロジェクトの作成方法(Windows フォーム アプリのテンプレート選択)
  • プログラムの実行方法
  • プロジェクトの保存方法
  • 既存プロジェクトを開く方法

すでに知っている内容も、「Windows フォームアプリで使う画面」 を意識して読み直してください。


課題 18-2 Windows フォームアプリを作成して実行する

Section titled “課題 18-2 Windows フォームアプリを作成して実行する”

書籍 Chapter 2 を参照しながら、Windows フォームアプリのプロジェクトを 実際に作って実行 してください。

手順の流れ(詳細は書籍 Chapter 2)

  1. Visual Studio で「Windows フォーム アプリ」テンプレートを選択
  2. プロジェクト名は書籍の指示どおり(既定では WinFormsApp1)
  3. フレームワークは .NET 8.0
  4. 作成後、csproj を開いて <Nullable>disable</Nullable> に変更
  5. デバッグ実行して、空のフォームが表示されることを確認
  6. フォームを閉じて停止することを確認

確認すること

  • 「Windows フォーム アプリ」テンプレートで作成できた(コンソール アプリではない)
  • 実行するとフォームが表示される
  • フォームの右上 × ボタンで閉じると、デバッグ実行も終わる
  • フォームデザイナーとコードエディター(Form1.cs)を切り替えられる
  • プロパティウィンドウが表示されている

困ったら

操作で迷ったら、書籍 Chapter 2 の該当ページを再確認してください。 それでも解決しないときは、講師に確認してください。


必須課題が終わった人は、発展課題に取り組んでください。


課題 18-3 フォームのプロパティをいくつか変更する

Section titled “課題 18-3 フォームのプロパティをいくつか変更する”

課題 18-2 で作ったフォームに対して、プロパティウィンドウから設定をいくつか変更してみてください。

試してほしい変更例

プロパティ名試す値の例効果
Text"研修用フォーム"フォーム上部のタイトル文字列
Size400, 300 などフォームのサイズ
StartPositionCenterScreen起動時に画面中央に表示
BackColor好きな色フォームの背景色
Font好きなフォント・サイズフォーム上の既定フォント

確認すること

  • プロパティウィンドウから値を変更できる
  • 実行結果に変更が反映される
  • 変更したプロパティ名と効果を 2 つ以上説明できる

補足

プロパティウィンドウで値を変更すると、Form1.Designer.cs が自動で書き換えられます。 このファイルは 直接手で編集しない のが原則です(変更は必ずプロパティウィンドウやデザイナーから)。


課題 18-4 VS の画面構成と Forms プロジェクトの構造を整理する

Section titled “課題 18-4 VS の画面構成と Forms プロジェクトの構造を整理する”

次の内容を、自分のノートまたはチームで説明してみてください。

まとめてほしい内容

  1. Visual Studio の画面構成:ソリューションエクスプローラー / フォームデザイナー / プロパティウィンドウ / ツールボックス / コードエディター の役割
  2. Forms プロジェクトのファイル構成:Program.cs / Form1.cs / Form1.Designer.cs / csproj の役割
  3. コンソールアプリとの違い:プロジェクトテンプレート、Main メソッドの形、よく使う VS 画面

紙に書いても、Markdown で書いても、口頭で説明しても構いません。 自分の言葉で整理する ことが目的です。


  • 「Windows フォーム アプリ」テンプレートで作成している(コンソール アプリではない)
  • csproj が <Nullable>disable</Nullable> になっている
  • フォームを実行して表示できる
  • フォームデザイナー・プロパティウィンドウを操作できる

本章で作った Windows フォームアプリのプロジェクト(課題 18-2)は、学習用に手元に残しておいてください。次章以降の参考になります。

本章は Git への提出を行いません。第 19 章から書籍と連動した本格的な体験課題を進め、そこから提出の流れを再開します。 プロジェクトをローカルに保管する場所(例: C:\Training\CSharp\ 配下)は、付録 C「Git のインストールと提出ルール」のフォルダ構成に合わせると後で迷いません。


この章では、Windows フォームアプリ開発の準備として、書籍 Chapter 1・2 を参照しながら次の内容を確認しました。

  • ここから書籍「作って覚える Visual C# 2022 デスクトップアプリ超入門」を併用する
  • Windows フォームアプリは画面部品を使うアプリで、利用者の操作で動く(イベント駆動)
  • 画面部品は C# のオブジェクトであり、これまで学んだクラス・プロパティ・メソッド・継承の知識が活きる
  • Visual Studio で Windows フォームアプリのプロジェクトを作成・実行できる
  • Program.cs(アプリ起動口)・Form1.cs(自分で書く)・Form1.Designer.cs(自動生成)の役割
  • partial class で 1 つのクラスを複数ファイルに分けている
  • 自動生成コードはブロック形式 namespace のまま使う(書籍と整合)
  • Forms プロジェクトでも csproj は Nullable disable

次章では、書籍 Chapter 3「簡単計算プログラム」を参照しながら、フォームに テキストボックス・ラベル・ボタン を配置し、ボタンをクリックしたときの処理(イベントハンドラー)を作成します。

ここで初めて、自分で書いた C# のコードが画面操作で動く瞬間を体験できます。