第18章 Windowsフォームアプリ開発の準備
この章の目的
Section titled “この章の目的”この章では、C# の学習を Windows フォームアプリ に広げます。 ここまで、コンソールアプリで C# の文法とクラス(オブジェクト指向)の基本を学んできました。 本章では、画面に部品を配置して操作するアプリ に触れ、書籍とともに進めるための準備を行います。
Windows フォーム編では、次の書籍を併用します。
作って覚える Visual C# 2022 デスクトップアプリ超入門(以下、本テキストでは「書籍」と表記します。)
書籍は 手を動かしながら覚える 構成になっています。本テキストでは書籍の内容をそのまま転記せず、研修固有の補足や体験指示 を中心に書きます。 書籍と本テキストを 両方手元に開いて 進めてください。
この章を読むタイミング
Section titled “この章を読むタイミング”本章は オブジェクト指向(第 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.csとForm1.csの役割を大まかに把握できる
本章で使用する書籍範囲
Section titled “本章で使用する書籍範囲”書籍の次の範囲を参照します。
| 範囲 | 内容 |
|---|---|
| Chapter 1 | プログラミングの基礎 |
| Chapter 2 | Visual Studio Community 2022 の基本操作 |
書籍 Chapter 1 では、Windows 用アプリケーションと C# の位置づけを確認します。 書籍 Chapter 2 では、Visual Studio の起動・画面構成・プロジェクト作成・実行・保存などを実際に手を動かして確認します。
本テキスト側の役割
操作手順や画面例は 書籍 に書かれています。 本テキストでは、研修固有のポイント(これまでに学んだ C# 知識との接続、研修での扱い方、体験指示)に絞って記述します。
本章で使用する環境
Section titled “本章で使用する環境”| 項目 | 内容 |
|---|---|
| 開発環境 | Visual Studio 2022 |
| プロジェクト種類 | Windows フォーム アプリ(コンソール アプリではない) |
| 対象フレームワーク | .NET 8 |
| プロジェクト名 | 書籍 Chapter 2 の指示に従う(既定では WinFormsApp1) |
csproj の Nullable について
Windows フォームのプロジェクトでも、本研修は引き続き
<Nullable>disable</Nullable>に設定します。 プロジェクト作成後、(プロジェクト名).csprojを開いて変更してください(第 1 章「1-1 プロジェクトを作成する」参照)。
作業前チェック
Section titled “作業前チェック”作業を始める前に、次の内容を確認してください。
- 直前の章までの提出が一段落している(並行受講の場合は講師の指示に従う)
- 書籍が手元にある
- Visual Studio 2022 で「Windows フォーム アプリ」テンプレートが選択できる(インストール済み)
18-1 なぜ書籍を使うのか
Section titled “18-1 なぜ書籍を使うのか”ここまでの 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 クラスのインスタンス |
| プロパティ | Text、BackColor、Enabled |
| メソッド | Show()、Close()、Focus() |
| イベント | Click、Load、TextChanged(これから学ぶ) |
| 継承 | 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 | プロジェクト設定 |
Program.cs を見てみる
Section titled “Program.cs を見てみる”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(後でフォーム名を変えると別名)の中身を書きます。
Form1.cs を見てみる
Section titled “Form1.cs を見てみる”namespace WinFormsApp1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } }}partial というキーワードが付いています。これは、1 つのクラスを複数のファイルに分けて定義 できる仕組みで、Form1.cs と Form1.Designer.cs で 1 つの Form1 クラスを構成します。
| ファイル | partial で書かれる内容 |
|---|---|
Form1.cs | 自分で書くロジック(イベントハンドラーなど) |
Form1.Designer.cs | フォーム上の部品配置(自動生成、手で触らない) |
Form1 : Form は、第 13 章で学んだ 継承 です。Form 親クラスを継承して、自分のフォームを作っています。
namespace の書き方について
Section titled “namespace の書き方について”自動生成された 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 で各画面の場所と使い方を学んでください。 分からなくなったときに どこを開けばよいか を覚えるのが、この章のポイントです。
よくあるつまずき
Section titled “よくあるつまずき”| つまずき | 原因 | 対応 |
|---|---|---|
| プロジェクトテンプレートで「コンソール アプリ」を選んでしまう | 名前が似ている | 「Windows フォーム アプリ」 を選ぶ |
| フォームデザイナーが表示されない | コードビューになっている | ソリューションエクスプローラーで Form1.cs をダブルクリック |
| プロパティウィンドウが見当たらない | 閉じてしまった | メニュー「表示」 → 「プロパティウィンドウ」 |
Form1.Designer.cs を直接編集してエラー | 自動生成ファイルを手で書いた | デザイナーから操作する。直接編集しない |
partial の意味が分からない | 1 クラスを複数ファイルに分ける機能 | デザイナー側と自分で書く側を分けている、と理解 |
Nullable 警告が大量に出る | csproj が disable になっていない | csproj で <Nullable>disable</Nullable> に変更 |
学んだことチェック
Section titled “学んだことチェック”- Windows フォームアプリとコンソールアプリの違いを説明できる
- イベント駆動の考え方を説明できる
- 画面部品がオブジェクトであることを、
オブジェクト名.プロパティ名の形で説明できる - Visual Studio で Windows フォームアプリのプロジェクトを作成できる
- フォームを実行して表示できる
- フォームデザイナー・プロパティウィンドウ・ツールボックスを開ける
-
Program.csとForm1.csの役割を大まかに説明できる -
partialでクラスが分かれている意味を説明できる(Form1.csとForm1.Designer.cs) -
Form1 : Formが第 13 章で学んだ継承であることを説明できる
研修の進め方によっては、隣の人またはチーム内で説明確認を行います。
次の内容を、自分の言葉で説明してください。
- コンソールアプリと Windows フォームアプリの違いは何ですか。
- イベント駆動とはどのような考え方ですか。
label1.Text = "こんにちは";は、これまでに学んだどの考え方とつながっていますか。- Visual Studio で Forms 開発に使う主な画面を 3 つ以上挙げてください。
Form1.Designer.csを直接編集してはいけないのはなぜですか。Form1がFormを継承しているのは、どんな利点がありますか。
本章の課題は 「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)
- Visual Studio で「Windows フォーム アプリ」テンプレートを選択
- プロジェクト名は書籍の指示どおり(既定では
WinFormsApp1) - フレームワークは
.NET 8.0 - 作成後、csproj を開いて
<Nullable>disable</Nullable>に変更 - デバッグ実行して、空のフォームが表示されることを確認
- フォームを閉じて停止することを確認
確認すること
- 「Windows フォーム アプリ」テンプレートで作成できた(コンソール アプリではない)
- 実行するとフォームが表示される
- フォームの右上 × ボタンで閉じると、デバッグ実行も終わる
- フォームデザイナーとコードエディター(
Form1.cs)を切り替えられる - プロパティウィンドウが表示されている
困ったら
操作で迷ったら、書籍 Chapter 2 の該当ページを再確認してください。 それでも解決しないときは、講師に確認してください。
必須課題が終わった人は、発展課題に取り組んでください。
課題 18-3 フォームのプロパティをいくつか変更する
Section titled “課題 18-3 フォームのプロパティをいくつか変更する”課題 18-2 で作ったフォームに対して、プロパティウィンドウから設定をいくつか変更してみてください。
試してほしい変更例
| プロパティ名 | 試す値の例 | 効果 |
|---|---|---|
Text | "研修用フォーム" | フォーム上部のタイトル文字列 |
Size | 400, 300 など | フォームのサイズ |
StartPosition | CenterScreen | 起動時に画面中央に表示 |
BackColor | 好きな色 | フォームの背景色 |
Font | 好きなフォント・サイズ | フォーム上の既定フォント |
確認すること
- プロパティウィンドウから値を変更できる
- 実行結果に変更が反映される
- 変更したプロパティ名と効果を 2 つ以上説明できる
補足
プロパティウィンドウで値を変更すると、
Form1.Designer.csが自動で書き換えられます。 このファイルは 直接手で編集しない のが原則です(変更は必ずプロパティウィンドウやデザイナーから)。
課題 18-4 VS の画面構成と Forms プロジェクトの構造を整理する
Section titled “課題 18-4 VS の画面構成と Forms プロジェクトの構造を整理する”次の内容を、自分のノートまたはチームで説明してみてください。
まとめてほしい内容
- Visual Studio の画面構成:ソリューションエクスプローラー / フォームデザイナー / プロパティウィンドウ / ツールボックス / コードエディター の役割
- Forms プロジェクトのファイル構成:
Program.cs/Form1.cs/Form1.Designer.cs/ csproj の役割 - コンソールアプリとの違い:プロジェクトテンプレート、
Mainメソッドの形、よく使う VS 画面
紙に書いても、Markdown で書いても、口頭で説明しても構いません。 自分の言葉で整理する ことが目的です。
体験完了のチェックリスト
Section titled “体験完了のチェックリスト”- 「Windows フォーム アプリ」テンプレートで作成している(コンソール アプリではない)
- csproj が
<Nullable>disable</Nullable>になっている - フォームを実行して表示できる
- フォームデザイナー・プロパティウィンドウを操作できる
本章の成果物について
Section titled “本章の成果物について”本章で作った Windows フォームアプリのプロジェクト(課題 18-2)は、学習用に手元に残しておいてください。次章以降の参考になります。
本章は Git への提出を行いません。第 19 章から書籍と連動した本格的な体験課題を進め、そこから提出の流れを再開します。
プロジェクトをローカルに保管する場所(例: C:\Training\CSharp\ 配下)は、付録 C「Git のインストールと提出ルール」のフォルダ構成に合わせると後で迷いません。
この章のまとめ
Section titled “この章のまとめ”この章では、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# のコードが画面操作で動く瞬間を体験できます。