【学習】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 を追加します。

コントロール名前用途
ListBoxnameList名前一覧
LabelphoneNumber電話番号表示
LabeladdressLabel住所表示(追加)

フォームのコード

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回

広告

C#

Posted by hidepon