【学習】WinFormsで作る電話帳アプリ(Listで管理する版)
Windows Forms を使うと、簡単にデスクトップアプリケーションを作ることができます。
今回は学習用として、電話帳アプリを作ります。
このチュートリアルでは、
- ファイルからデータを読み込む
- List でデータを管理する
- ListBox で名前を表示する
- 名前を選ぶと電話番号を表示する
という流れを学びます。
今日作るもの
画面はシンプルです。
名前一覧(ListBox)
↓
名前をクリック
↓
電話番号を表示例:田中をクリック → 090-1234-5678 と表示されます。
電話帳データの形式
今回はテキストファイルを読み込みます。
data.txt
名前,電話番号の形式で保存します。
| 例 |
|---|
| 田中,090-1111-1111 |
| 佐藤,090-2222-2222 |
| 鈴木,090-3333-3333 |
電話帳1件を表すクラス
まず電話帳1件を表すクラスを作ります。
PhoneData.cs
class PhoneData
{
public string Name;
public string PhoneNumber;
}ここでは Name と PhoneNumber の2つの情報を持たせています。
Listで電話帳を管理する
電話帳は複数のデータを持つので List を使います。
List<PhoneData> phoneBook;これは PhoneData の集合になります。
フォームのコード
Form1.cs
(サンプルの @"..\..\data.txt" 部分は、教科書に合わせています。"data.txt" で取得できるようにしている場合はそれに合わせてください)
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace PhoneBook
{
public partial class Form1 : Form
{
List<PhoneData> phoneBook;
public Form1()
{
InitializeComponent();
// 電話帳リストを作る
phoneBook = new List<PhoneData>();
// ファイル読み込み
ReadFromFile();
// 名前をListBoxに表示
foreach (PhoneData data in phoneBook)
{
nameList.Items.Add(data.Name);
}
}
private void ReadFromFile()
{
using (System.IO.StreamReader file =
new System.IO.StreamReader(@"..\..\data.txt"))
{
while (!file.EndOfStream)
{
string line = file.ReadLine();
string[] data = line.Split(',');
PhoneData phone = new PhoneData();
phone.Name = data[0];
phone.PhoneNumber = data[1];
phoneBook.Add(phone);
}
}
}
private void NameSelected(object sender, EventArgs e)
{
string name = nameList.Text;
foreach (PhoneData data in phoneBook)
{
if (data.Name == name)
{
phoneNumber.Text = data.PhoneNumber;
break;
}
}
}
}
}ファイル読み込みの処理
string line = file.ReadLine();1行読み込みます。例:田中,090-1111-1111
Splitで分割
string[] data = line.Split(',');結果:data[0] = 田中、data[1] = 090-1111-1111
クラスにデータを入れる
PhoneData phone = new PhoneData();
phone.Name = data[0];
phone.PhoneNumber = data[1];Listに追加
phoneBook.Add(phone);これで電話帳が増えていきます。
名前をクリックしたとき
ListBox の選択イベントで NameSelected が呼ばれます。
選択された名前
string name = nameList.Text;電話帳を検索
foreach (PhoneData data in phoneBook)
{
if (data.Name == name)
{
phoneNumber.Text = data.PhoneNumber;
break;
}
}一致したデータを探します。
Dictionaryとの違い
Dictionary なら phoneBook[name] で取得できます。
しかし今回は List + クラス で作っています。
理由は オブジェクト指向を理解するため です。
List + クラスのメリット
電話帳は将来、
- 名前
- 電話番号
- 住所
- メール
- メモ
のように増えるかもしれません。
その場合、Dictionary<string, string> では対応できません。
しかし class PhoneData なら簡単に拡張できます。
プログラムの流れ
フォーム起動
↓
ReadFromFile() で data.txt を読み込み
↓
ListBox に名前を表示
↓
ユーザーが名前をクリック
↓
NameSelected が呼ばれる
↓
一致する PhoneData を検索
↓
電話番号を Label に表示重要ポイント
- ファイル読み込み:StreamReader で1行ずつ読み、Split で分割
- List の使い方:複数の PhoneData を管理
- クラスを使ったデータ管理:拡張しやすい構造
- WinForms のイベント:ListBox の選択変更で NameSelected が呼ばれる
まとめ
今回学んだこと
- ファイル読み込み
- Split による文字列分割
- List の使い方
- クラスを使ったデータ管理
- WinForms のイベント
小さなアプリですが、実際のアプリ開発の基本がたくさん含まれています。