【学習】WinFormsで作る電話帳アプリ(住所追加版)
前回のチュートリアルでは、List + PhoneData で電話帳アプリを作りました。
今回はそこに 住所 を追加します。
このチュートリアルでは、
- PhoneData クラスにプロパティを追加する
- data.txt の形式を拡張する
- フォームに表示用の Label を追加する
- 名前クリックで電話番号と住所の両方を表示する
という流れを学びます。
目次
前提
前回の電話帳アプリ(List版)が完成していること。
- PhoneData クラス(Name, PhoneNumber)
- Listで管理
- data.txt から読み込み
- ListBox に名前表示、名前クリックで電話番号表示
今日作るもの
前回の画面に 住所 が追加されます。
名前一覧(ListBox)
↓
名前をクリック
↓
電話番号と住所を表示
例:田中をクリック → 電話番号 090-1111-1111 と住所 東京都渋谷区1-2-3 が表示されます。
変更1:PhoneData に Address を追加
PhoneData.cs
class PhoneData
{
public string Name;
public string PhoneNumber;
public string Address; // 追加
}
プロパティを1行追加するだけで、電話帳1件が持つ情報を増やせます。
変更2:data.txt の形式
data.txt
名前,電話番号,住所
の形式に変更します。
| 例 |
|---|
| 田中,090-1111-1111,東京都渋谷区1-2-3 |
| 佐藤,090-2222-2222,大阪府大阪市北区4-5-6 |
| 鈴木,090-3333-3333,福岡県福岡市博多区7-8-9 |
変更3:フォームに住所用 Label を追加
フォームに 住所表示用の Label を追加します。
| コントロール | 名前 | 用途 |
|---|---|---|
| ListBox | nameList | 名前一覧 |
| Label | phoneNumber | 電話番号表示 |
| Label | addressLabel | 住所表示(追加) |
フォームのコード
Form1.cs
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];
phone.Address = data[2]; // 追加
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;
addressLabel.Text = data.Address; // 追加
break;
}
}
}
}
}
変更ポイントの解説
ファイル読み込み(ReadFromFile)
phone.Address = data[2]; // 3つ目のカラムを住所に
Split の結果が data[0]=名前、data[1]=電話番号、data[2]=住所 になるので、そのまま代入します。
名前クリック時(NameSelected)
phoneNumber.Text = data.PhoneNumber;
addressLabel.Text = data.Address;
電話番号と住所の両方を、それぞれの Label に表示します。
プログラムの流れ
フォーム起動
↓
ReadFromFile() で data.txt を読み込み(3カラム)
↓
ListBox に名前を表示
↓
ユーザーが名前をクリック
↓
NameSelected が呼ばれる
↓
一致する PhoneData を検索
↓
電話番号と住所をそれぞれの Label に表示
重要ポイント
- クラスの拡張:PhoneData に Address を追加するだけで、新しい情報を扱える
- data.txt の拡張:カンマ区切りで列を増やすだけ
- ReadFromFile の変更:
data[2]を Address に代入 - NameSelected の変更:addressLabel にも表示する
List + クラスにしたことで、住所の追加が少ない変更で済むことがポイントです。
まとめ
今回の変更
- PhoneData に Address プロパティを追加
- data.txt を「名前,電話番号,住所」形式に変更
- フォームに住所表示用 Label を追加
- 名前クリックで電話番号と住所を表示
将来、メールやメモを追加する場合も、同じようにクラスと data.txt を拡張するだけで対応できます。
訪問数 17 回, 今日の訪問数 17回


ディスカッション
コメント一覧
まだ、コメントがありません