第21章 Windowsフォームアプリの基本
この章の目的
Section titled “この章の目的”この章では、C#でデスクトップアプリを作成するために、Windowsフォームアプリ の基本を学習します。
これまでの章では、主に次の種類のアプリを作成してきました。
コンソールアプリASP.NET Core MVCによるWebアプリコンソールアプリでは、画面は黒いコンソール画面でした。
文字を入力するEnterキーを押す結果が文字で表示されるWebアプリでは、ブラウザーを使いました。
ブラウザーでURLにアクセスするControllerが処理するViewがHTMLを返すブラウザーに画面が表示されるこの章からは、Windows上で動く画面アプリを作成します。
フォームボタンテキストボックスラベルリスト表などを配置し、利用者がボタンをクリックしたときに処理が動くアプリを作ります。
この章の目的は、Windowsフォームアプリを深く作り込むことではありません。
まずは、次のことを理解することを目指します。
Windowsフォームアプリは画面部品を配置して作るボタンクリックなどのイベントで処理を書くフォーム上の部品から値を取得できるフォーム上の部品に結果を表示できる後の章では、Oracle Databaseから取得した社員データを、Windowsフォームアプリの画面に表示します。
挿絵・スクリーンショット案
Section titled “挿絵・スクリーンショット案”この章では、以下の画像を入れると理解しやすくなります。
図21-1 コンソールアプリ・Webアプリ・デスクトップアプリの違い図21-2 Windowsフォームアプリのプロジェクト作成画面図21-3 フォームデザイナー画面図21-4 ツールボックスからLabelやButtonを配置する画面図21-5 プロパティウィンドウでNameやTextを変更する画面図21-6 ボタンクリックイベントを作成する画面図21-7 社員情報入力アプリの完成例画像を挿入する場合は、次のように書けます。
画像ファイルは、images フォルダにまとめると管理しやすくなります。
CSharpText/ ├─ 21_winforms_basic.md └─ images/ ├─ 21_winforms_project_create.png ├─ 21_form_designer.png ├─ 21_toolbox_controls.png ├─ 21_property_window.png └─ 21_employee_form.pngこの章でできるようになること
Section titled “この章でできるようになること”この章を終えると、次のことができるようになります。
- Windowsフォームアプリとは何かを説明できる
- Visual Studio 2022でWindowsフォームアプリを作成できる
- フォームデザイナーの基本操作ができる
Label、TextBox、Buttonを配置できる- コントロールの
NameとTextを変更できる - ボタンクリックイベントを作成できる
- テキストボックスに入力された値を取得できる
- ラベルに結果を表示できる
ListBoxに複数のデータを表示できる- 簡単な入力チェックができる
- Windowsフォームアプリがイベント駆動で動くことを説明できる
本章で使用する環境
Section titled “本章で使用する環境”| 項目 | 内容 |
|---|---|
| 開発環境 | Visual Studio 2022 |
| プロジェクト種類 | Windows フォーム アプリ |
| 対象フレームワーク | .NET 8 |
| プロジェクト名 | Chapter21_WinFormsBasic |
| DB接続 | この章ではまだ行わない |
作業前チェック
Section titled “作業前チェック”作業を始める前に、次の内容を確認してください。
- Visual Studio 2022を起動できる
- C#のクラスやメソッドをおおまかに読める
-
if文を使える -
List<T>を使える - 変数とプロパティの違いをおおまかに理解している
- 第20章の内容をGitに提出済みである
21-1 デスクトップアプリとは?
Section titled “21-1 デスクトップアプリとは?”コンソールアプリとの違い
Section titled “コンソールアプリとの違い”コンソールアプリは、文字入力と文字表示を中心に動くアプリです。
入力してください山田太郎こんにちは、山田太郎さん処理の流れも、基本的には上から順番です。
Mainメソッド開始 ↓入力 ↓処理 ↓出力 ↓終了Webアプリとの違い
Section titled “Webアプリとの違い”Webアプリは、ブラウザーからリクエストを送り、サーバー側で処理を行い、HTMLを返すアプリでした。
ブラウザー ↓Controller ↓View ↓ブラウザーURLにアクセスしたり、フォームを送信したりして処理が動きます。
Windowsフォームアプリの特徴
Section titled “Windowsフォームアプリの特徴”Windowsフォームアプリは、Windows上で動く画面アプリです。
利用者は、画面上の部品を操作します。
テキストボックスに入力するボタンをクリックするリストから選択する表を見るWindowsフォームアプリでは、ボタンをクリックしたときなどに処理が実行されます。
画面が表示される ↓利用者がボタンをクリックする ↓クリックイベントが実行される ↓画面に結果が表示されるこのように、利用者の操作をきっかけに処理が動く考え方を イベント駆動 と呼びます。
21-2 Windowsフォームアプリを作成する
Section titled “21-2 Windowsフォームアプリを作成する”プロジェクトを作成する
Section titled “プロジェクトを作成する”Visual Studio 2022を起動し、次の手順でプロジェクトを作成します。
1. 「新しいプロジェクトの作成」をクリックする2. 「Windows フォーム アプリ」を選択する3. 「次へ」をクリックする4. プロジェクト名に Chapter21_WinFormsBasic と入力する5. 保存場所を確認する6. 「次へ」をクリックする7. フレームワークで .NET 8.0 を選択する8. 「作成」をクリックする図21-2 挿入候補
Windowsフォームアプリのプロジェクトテンプレート選択画面を入れるとよいです。
作成直後の画面
Section titled “作成直後の画面”プロジェクトを作成すると、フォームデザイナーが表示されます。
Form1という名前の画面が表示されていれば成功です。
フォームは、Windowsアプリの画面そのものです。
Form → アプリの画面初期状態で実行する
Section titled “初期状態で実行する”まずは、何も配置せずに実行してみます。
1. Visual Studio上部の実行ボタンをクリックする2. 空のフォームが表示される3. 右上の×ボタンで閉じる空のウィンドウが表示されれば、Windowsフォームアプリとして動作しています。
図21-3 挿入候補
空のフォームが表示されている画面を入れるとよいです。
21-3 フォームデザイナーを確認する
Section titled “21-3 フォームデザイナーを確認する”フォームデザイナーとは
Section titled “フォームデザイナーとは”フォームデザイナーは、画面部品を配置するための画面です。
ここに、ラベル、テキストボックス、ボタンなどを配置していきます。
LabelTextBoxButtonListBoxComboBoxDataGridViewこの章では、まず次の部品を使います。
| コントロール | 役割 |
|---|---|
Label | 文字を表示する |
TextBox | 文字を入力する |
Button | クリックして処理を実行する |
ListBox | 複数の項目を一覧表示する |
ツールボックス
Section titled “ツールボックス”画面左側または右側に、ツールボックス があります。
表示されていない場合は、次の操作で表示できます。
表示 → ツールボックスツールボックスから、フォーム上に部品をドラッグして配置できます。
図21-4 挿入候補
ツールボックスからLabelやButtonを配置する画面を入れるとよいです。
プロパティウィンドウ
Section titled “プロパティウィンドウ”配置した部品をクリックすると、プロパティウィンドウで設定を変更できます。
よく使うプロパティは次の通りです。
| プロパティ | 意味 |
|---|---|
Name | C#コードから使う名前 |
Text | 画面に表示される文字 |
Font | 文字の種類や大きさ |
Size | 部品の大きさ |
Location | 部品の位置 |
特に重要なのは、Name と Text です。
Name → プログラム内で使う名前
Text → 画面に表示される文字図21-5 挿入候補
プロパティウィンドウで
NameとTextを変更している画面を入れるとよいです。
21-4 Label、TextBox、Buttonを配置する
Section titled “21-4 Label、TextBox、Buttonを配置する”画面を作成する
Section titled “画面を作成する”まず、名前を入力してメッセージを表示する簡単なアプリを作成します。
フォームに次の部品を配置してください。
| コントロール | Name | Text |
|---|---|---|
Label | lblName | 氏名 |
TextBox | txtName | 空欄 |
Button | btnShow | 表示 |
Label | lblResult | 空欄 |
配置例:
氏名 [ ] [表示]
ここに結果を表示lblResult の Text は、最初は空欄にしておきます。
NameとTextの違い
Section titled “NameとTextの違い”たとえば、ボタンには次の2つを設定します。
Name: btnShowText: 表示Text は、画面に表示される文字です。
表示Name は、C#コードからそのボタンを扱うための名前です。
btnShowこの違いは非常に重要です。
21-5 ボタンクリックイベントを作成する
Section titled “21-5 ボタンクリックイベントを作成する”イベントとは
Section titled “イベントとは”イベントとは、利用者の操作などによって発生する出来事です。
代表的なイベントには、次のようなものがあります。
ボタンがクリックされたテキストが変更されたフォームが読み込まれたリストの選択が変わったWindowsフォームアプリでは、イベントが発生したときに実行する処理を書きます。
ボタンクリックイベントを作成する
Section titled “ボタンクリックイベントを作成する”フォームデザイナーで btnShow をダブルクリックしてください。
すると、次のようなメソッドが作成されます。
private void btnShow_Click(object sender, EventArgs e){}このメソッドは、btnShow がクリックされたときに実行されます。
入力された名前を表示する
Section titled “入力された名前を表示する”btnShow_Click に次のコードを書きます。
private void btnShow_Click(object sender, EventArgs e){ string name = txtName.Text;
lblResult.Text = $"こんにちは、{name}さん";}実行して、テキストボックスに名前を入力し、表示ボタンをクリックしてください。
実行例:
氏名 [山田太郎] [表示]
こんにちは、山田太郎さんTextプロパティ
Section titled “Textプロパティ”TextBox の入力値は、Text プロパティから取得できます。
string name = txtName.Text;Label に表示する文字も、Text プロパティへ代入します。
lblResult.Text = "表示したい文字";ここでも、プロパティの考え方が使われています。
21-6 入力チェックを追加する
Section titled “21-6 入力チェックを追加する”空欄のまま表示ボタンを押した場合
Section titled “空欄のまま表示ボタンを押した場合”現在のコードでは、名前を入力しなくてもメッセージが表示されます。
こんにちは、さんこれは少し不自然です。
そこで、名前が空欄の場合はエラーメッセージを表示します。
string.IsNullOrWhiteSpaceを使う
Section titled “string.IsNullOrWhiteSpaceを使う”btnShow_Click を次のように変更します。
private void btnShow_Click(object sender, EventArgs e){ string name = txtName.Text;
if (string.IsNullOrWhiteSpace(name)) { lblResult.Text = "氏名を入力してください。"; return; }
lblResult.Text = $"こんにちは、{name}さん";}string.IsNullOrWhiteSpace は、文字列が空欄または空白だけかどうかを判定します。
string.IsNullOrWhiteSpace(name)空欄の場合は、メッセージを表示して return します。
return;return によって、その後の処理を実行せずにメソッドを終了します。
Trimを使う
Section titled “Trimを使う”入力値の前後の空白を取り除きたい場合は、Trim を使います。
string name = txtName.Text.Trim();次のようにすると、前後の空白を除いた名前で処理できます。
private void btnShow_Click(object sender, EventArgs e){ string name = txtName.Text.Trim();
if (string.IsNullOrWhiteSpace(name)) { lblResult.Text = "氏名を入力してください。"; return; }
lblResult.Text = $"こんにちは、{name}さん";}21-7 社員情報入力アプリを作る
Section titled “21-7 社員情報入力アプリを作る”画面を拡張する
Section titled “画面を拡張する”次に、社員情報を入力して表示するアプリにします。
フォームに次の部品を配置してください。
| コントロール | Name | Text |
|---|---|---|
Label | lblEmployeeId | 社員ID |
TextBox | txtEmployeeId | 空欄 |
Label | lblEmployeeName | 社員名 |
TextBox | txtEmployeeName | 空欄 |
Label | lblDepartmentName | 部署名 |
TextBox | txtDepartmentName | 空欄 |
Button | btnAddEmployee | 追加 |
ListBox | lstEmployees | 空欄 |
配置例:
社員ID [ ]社員名 [ ]部署名 [ ]
[追加]
社員一覧[ ][ ][ ]Employeeクラスを作成する
Section titled “Employeeクラスを作成する”Employee.cs を追加し、次のクラスを作成します。
namespace Chapter21_WinFormsBasic{ public class Employee { public int EmployeeId { get; set; } public string EmployeeName { get; set; } = ""; public string DepartmentName { get; set; } = "";
public string GetDisplayText() { return $"{EmployeeId}:{EmployeeName}({DepartmentName})"; } }}このクラスは、社員1人分の情報を表します。
フォームにListを用意する
Section titled “フォームにListを用意する”Form1.cs を開き、フォームクラスの中に List<Employee> を用意します。
namespace Chapter21_WinFormsBasic{ public partial class Form1 : Form { private List<Employee> _employees = new List<Employee>();
public Form1() { InitializeComponent(); } }}_employees は、画面上で追加した社員情報を保持するリストです。
追加ボタンのイベントを作成する
Section titled “追加ボタンのイベントを作成する”btnAddEmployee をダブルクリックし、クリックイベントを作成します。
private void btnAddEmployee_Click(object sender, EventArgs e){}入力値を取得する
Section titled “入力値を取得する”まず、テキストボックスから入力値を取得します。
private void btnAddEmployee_Click(object sender, EventArgs e){ string employeeIdText = txtEmployeeId.Text.Trim(); string employeeName = txtEmployeeName.Text.Trim(); string departmentName = txtDepartmentName.Text.Trim();}社員IDを数値に変換する
Section titled “社員IDを数値に変換する”社員IDは int として扱いたいため、int.TryParse を使います。
if (!int.TryParse(employeeIdText, out int employeeId)){ MessageBox.Show("社員IDは整数で入力してください。"); return;}Windowsフォームアプリでは、メッセージ表示に MessageBox.Show を使えます。
MessageBox.Show("表示したいメッセージ");入力チェックを行う
Section titled “入力チェックを行う”社員名と部署名が空欄の場合もチェックします。
if (string.IsNullOrWhiteSpace(employeeName)){ MessageBox.Show("社員名を入力してください。"); return;}
if (string.IsNullOrWhiteSpace(departmentName)){ MessageBox.Show("部署名を入力してください。"); return;}Employeeオブジェクトを作成する
Section titled “Employeeオブジェクトを作成する”入力値に問題がなければ、Employee オブジェクトを作成します。
Employee employee = new Employee{ EmployeeId = employeeId, EmployeeName = employeeName, DepartmentName = departmentName};作成した社員を _employees に追加します。
_employees.Add(employee);ListBoxに表示する
Section titled “ListBoxに表示する”ListBox に社員情報を表示します。
lstEmployees.Items.Add(employee.GetDisplayText());追加ボタンの完成コード
Section titled “追加ボタンの完成コード”btnAddEmployee_Click 全体は次のようになります。
private void btnAddEmployee_Click(object sender, EventArgs e){ string employeeIdText = txtEmployeeId.Text.Trim(); string employeeName = txtEmployeeName.Text.Trim(); string departmentName = txtDepartmentName.Text.Trim();
if (!int.TryParse(employeeIdText, out int employeeId)) { MessageBox.Show("社員IDは整数で入力してください。"); return; }
if (string.IsNullOrWhiteSpace(employeeName)) { MessageBox.Show("社員名を入力してください。"); return; }
if (string.IsNullOrWhiteSpace(departmentName)) { MessageBox.Show("部署名を入力してください。"); return; }
Employee employee = new Employee { EmployeeId = employeeId, EmployeeName = employeeName, DepartmentName = departmentName };
_employees.Add(employee);
lstEmployees.Items.Add(employee.GetDisplayText());
txtEmployeeId.Clear(); txtEmployeeName.Clear(); txtDepartmentName.Clear();
txtEmployeeId.Focus();}ClearとFocus
Section titled “ClearとFocus”TextBox の内容を消すには、Clear を使えます。
txtEmployeeId.Clear();入力カーソルを指定した部品に移動するには、Focus を使います。
txtEmployeeId.Focus();これにより、次の社員情報を続けて入力しやすくなります。
21-8 選択した社員を表示する
Section titled “21-8 選択した社員を表示する”ListBoxの選択
Section titled “ListBoxの選択”ListBox では、項目をクリックして選択できます。
選択されている位置は、SelectedIndex で取得できます。
int index = lstEmployees.SelectedIndex;何も選択されていない場合、SelectedIndex は -1 になります。
詳細表示ボタンを追加する
Section titled “詳細表示ボタンを追加する”フォームに次のボタンを追加します。
| コントロール | Name | Text |
|---|---|---|
Button | btnShowSelected | 選択した社員を表示 |
ボタンをダブルクリックして、クリックイベントを作成します。
選択した社員を取得する
Section titled “選択した社員を取得する”_employees と lstEmployees は、同じ順番でデータを持っています。
そのため、SelectedIndex を使って社員を取り出せます。
private void btnShowSelected_Click(object sender, EventArgs e){ int index = lstEmployees.SelectedIndex;
if (index < 0) { MessageBox.Show("社員を選択してください。"); return; }
Employee employee = _employees[index];
MessageBox.Show(employee.GetDisplayText());}この方法は、学習用としては分かりやすいです。
ただし、実務では画面表示とデータの対応をより安全に扱う方法を使うこともあります。
次章以降では、DataGridView を使って、一覧表示をより表形式に近い形で扱います。
21-9 イベント駆動の考え方を整理する
Section titled “21-9 イベント駆動の考え方を整理する”コンソールアプリとの違い
Section titled “コンソールアプリとの違い”コンソールアプリでは、基本的に上から順番に処理が進みました。
Main ↓入力 ↓処理 ↓表示Windowsフォームアプリでは、フォームが表示された後、利用者の操作によって処理が実行されます。
フォームを表示 ↓利用者が入力する ↓ボタンをクリックする ↓クリックイベントが実行されるイベントごとに処理を書く
Section titled “イベントごとに処理を書く”Windowsフォームアプリでは、次のようにイベントごとにメソッドを書きます。
private void btnAddEmployee_Click(object sender, EventArgs e){ // 追加ボタンがクリックされたときの処理}
private void btnShowSelected_Click(object sender, EventArgs e){ // 選択した社員を表示ボタンがクリックされたときの処理}どのタイミングで処理が実行されるかを意識することが重要です。
画面部品とコードの関係
Section titled “画面部品とコードの関係”フォーム上の部品には Name を付けます。
txtEmployeeNamebtnAddEmployeelstEmployeesコードでは、その名前を使って部品にアクセスします。
txtEmployeeName.TextbtnAddEmployee_ClicklstEmployees.Items.Add(...)つまり、Windowsフォームアプリでは、画面上の部品とC#コードが強く結びついています。
21-10 ファイル構成を確認する
Section titled “21-10 ファイル構成を確認する”Program.cs
Section titled “Program.cs”Windowsフォームアプリにも Program.cs があります。
中には、アプリを起動するための処理が書かれています。
namespace Chapter21_WinFormsBasic{ internal static class Program { [STAThread] static void Main() { ApplicationConfiguration.Initialize(); Application.Run(new Form1()); } }}Application.Run(new Form1()); によって、Form1 が表示されます。
Form1.cs
Section titled “Form1.cs”Form1.cs には、フォームの処理を書きます。
public partial class Form1 : Form{ public Form1() { InitializeComponent(); }}ボタンクリックイベントなどは、通常このファイルに書きます。
Form1.Designer.cs
Section titled “Form1.Designer.cs”フォームに配置した部品の情報は、Form1.Designer.cs に自動生成されます。
通常、このファイルを手で直接編集する必要はありません。
Form1.cs → 自分で処理を書く
Form1.Designer.cs → Visual Studioが画面部品の情報を自動生成する誤って Designer.cs を大きく変更すると、フォームデザイナーが正常に表示されなくなることがあるため注意してください。
よくあるつまずき
Section titled “よくあるつまずき”| つまずき | 原因 | 対応 |
|---|---|---|
| ツールボックスが見つからない | 表示されていない | 「表示」→「ツールボックス」を選ぶ |
| プロパティウィンドウが見つからない | 表示されていない | 「表示」→「プロパティ ウィンドウ」を選ぶ |
| ボタンをダブルクリックしてもイベントができない | デザイナーではなくコードを開いている | Formのデザイナー画面を開く |
txtName が見つからない | Nameを変更していない | TextではなくNameを確認する |
| 画面に表示される文字が変わらない | TextではなくNameを変更している | 表示文字はTextを変更する |
| 入力値が取得できない | TextBoxのNameが違う | txtEmployeeName.Text などを確認する |
| 数値変換でエラーになる | int.Parse を使っている | int.TryParse を使う |
| ListBoxに表示されない | Items.Add を呼んでいない | lstEmployees.Items.Add(...) を確認する |
| 選択していないのに表示しようとしてエラーになる | SelectedIndex が -1 | 選択チェックを行う |
| Designer.csを編集して壊れる | 自動生成ファイルを手で変更している | 基本的にForm1.csへ処理を書く |
学んだことチェック
Section titled “学んだことチェック”次の項目について、自分で説明できるか確認してください。
- Windowsフォームアプリとは何かを説明できる
- コンソールアプリ、Webアプリ、デスクトップアプリの違いを説明できる
- Windowsフォームアプリのプロジェクトを作成できる
- フォームデザイナーを開ける
-
Label、TextBox、Buttonを配置できる - コントロールの
NameとTextの違いを説明できる - ボタンクリックイベントを作成できる
-
TextBox.Textから入力値を取得できる -
Label.Textに結果を表示できる -
MessageBox.Showでメッセージを表示できる -
ListBoxに項目を追加できる -
SelectedIndexを使って選択項目を確認できる - Windowsフォームアプリがイベント駆動で動くことを説明できる
研修の進め方によっては、隣の人または近くの人と説明確認を行います。
次の内容を、自分の言葉で説明してください。
- Windowsフォームアプリは、コンソールアプリと何が違いますか。
- Windowsフォームアプリは、Webアプリと何が違いますか。
NameプロパティとTextプロパティの違いは何ですか。- ボタンクリックイベントは、いつ実行されますか。
txtEmployeeName.Textは何を表していますか。MessageBox.Showはどのようなときに使えますか。ListBoxはどのような画面部品ですか。SelectedIndexが-1の場合、何を意味しますか。- Windowsフォームアプリがイベント駆動であるとは、どういう意味ですか。
この章の演習課題に取り組みます。
制限時間は 90分 です。
時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。
課題21-1 Windowsフォームアプリを作成する
Section titled “課題21-1 Windowsフォームアプリを作成する”Windowsフォームアプリのプロジェクトを作成してください。
条件:
- プロジェクト名は
Chapter21_WinFormsBasicとする - フレームワークは
.NET 8.0を選択する - 初期状態で実行し、空のフォームが表示されることを確認する
課題21-2 名前表示アプリを作成する
Section titled “課題21-2 名前表示アプリを作成する”氏名を入力し、表示ボタンを押すとメッセージが表示されるアプリを作成してください。
配置するコントロール:
| コントロール | Name | Text |
|---|---|---|
Label | lblName | 氏名 |
TextBox | txtName | 空欄 |
Button | btnShow | 表示 |
Label | lblResult | 空欄 |
実行例:
こんにちは、山田太郎さん条件:
- ボタンクリックイベントを作成する
txtName.Textから入力値を取得するlblResult.Textに結果を表示する
課題21-3 入力チェックを追加する
Section titled “課題21-3 入力チェックを追加する”課題21-2に、空欄チェックを追加してください。
条件:
- 氏名が空欄の場合は
"氏名を入力してください。"と表示する string.IsNullOrWhiteSpaceを使う- 入力値の前後の空白を
Trimで取り除く
課題21-4 社員情報入力画面を作成する
Section titled “課題21-4 社員情報入力画面を作成する”社員ID、社員名、部署名を入力する画面を作成してください。
配置するコントロール:
| コントロール | Name | Text |
|---|---|---|
Label | lblEmployeeId | 社員ID |
TextBox | txtEmployeeId | 空欄 |
Label | lblEmployeeName | 社員名 |
TextBox | txtEmployeeName | 空欄 |
Label | lblDepartmentName | 部署名 |
TextBox | txtDepartmentName | 空欄 |
Button | btnAddEmployee | 追加 |
ListBox | lstEmployees | 空欄 |
条件:
- 見やすい位置に配置する
- 各コントロールの
Nameを正しく設定する
課題21-5 Employeeクラスを作成する
Section titled “課題21-5 Employeeクラスを作成する”社員情報を表す Employee クラスを作成してください。
プロパティ:
| プロパティ名 | 型 |
|---|---|
EmployeeId | int |
EmployeeName | string |
DepartmentName | string |
条件:
Employee.csを作成するGetDisplayTextメソッドを作成する- 表示例は
1001:山田太郎(営業部)とする
課題21-6 社員情報をListBoxに追加する
Section titled “課題21-6 社員情報をListBoxに追加する”追加ボタンを押したとき、入力された社員情報を ListBox に追加してください。
条件:
- 社員IDは
int.TryParseでチェックする - 社員名が空欄ならメッセージを表示する
- 部署名が空欄ならメッセージを表示する
Employeeオブジェクトを作成するList<Employee>に追加するlstEmployees.Items.Addで画面に表示する
課題21-7 入力欄をクリアする
Section titled “課題21-7 入力欄をクリアする”社員情報を追加した後、入力欄をクリアしてください。
条件:
txtEmployeeId.Clear()を使うtxtEmployeeName.Clear()を使うtxtDepartmentName.Clear()を使う- 最後に
txtEmployeeId.Focus()を呼び出す
課題21-8 選択した社員を表示する
Section titled “課題21-8 選択した社員を表示する”ListBox で選択した社員を、メッセージボックスで表示してください。
条件:
btnShowSelectedボタンを追加するSelectedIndexを使う- 何も選択されていない場合はメッセージを表示する
- 選択されている場合は、該当する
Employeeを取得して表示する
課題21-9 社員IDの重複チェックを追加する
Section titled “課題21-9 社員IDの重複チェックを追加する”同じ社員IDの社員を追加できないようにしてください。
条件:
_employeesの中に同じ社員IDがあるか確認するAnyを使ってもよい- 重複している場合は
"同じ社員IDが既に登録されています。"と表示する
例:
bool exists = _employees.Any(employee => employee.EmployeeId == employeeId);課題21-10 部署名で絞り込み表示する
Section titled “課題21-10 部署名で絞り込み表示する”部署名を入力し、その部署の社員だけを ListBox に表示してください。
条件:
- 部署検索用の
TextBoxとButtonを追加する Whereを使って部署名で絞り込むListBoxを一度クリアしてから検索結果を表示する- 検索結果が0件の場合はメッセージを表示する
Gitへの提出
Section titled “Gitへの提出”課題が終わったら、できたところまでをGitに提出します。
git statusgit add .git commit -m "Chapter21 Windowsフォームアプリの基本"git pushGitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。
提出前チェックリスト
Section titled “提出前チェックリスト”- Windowsフォームアプリを作成できている
- フォームを実行できている
- Label、TextBox、Buttonを配置できている
- コントロールのNameを適切に設定している
- ボタンクリックイベントを作成している
- テキストボックスの入力値を取得できている
- ラベルに結果を表示できている
- 入力チェックを行っている
- Employeeクラスを作成している
- List
を使っている - ListBoxに社員情報を表示している
- 選択された社員を取得できている
- インデントが整っている
- Gitにcommitしている
- Gitにpushしている
この章のまとめ
Section titled “この章のまとめ”この章では、Windowsフォームアプリの基本を学習しました。
この章で学んだ主な内容は次の通りです。
- Windowsフォームアプリは、Windows上で動くデスクトップアプリである
- フォームはアプリの画面を表す
- ツールボックスから画面部品を配置できる
- プロパティウィンドウで
NameやTextを変更できる NameはC#コードから使う名前であるTextは画面に表示される文字である- ボタンをクリックしたときの処理は、クリックイベントに書く
TextBox.Textで入力値を取得できるLabel.Textで表示文字を変更できるMessageBox.Showでメッセージを表示できるListBoxに複数の項目を表示できるSelectedIndexで選択された位置を取得できる- Windowsフォームアプリは、利用者の操作をきっかけに処理が動くイベント駆動のアプリである
- 画面で入力されたデータを
Employeeオブジェクトとして扱える List<Employee>を使って、複数の社員情報を管理できる
次章では、DataGridViewで一覧を表示する 方法を学習します。
ListBox よりも表形式のデータ表示に適した DataGridView を使い、社員一覧を列ごとに表示します。
後の章では、この DataGridView にOracle Databaseから取得した社員一覧を表示します。