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
PhoneData
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;
    }
}

一致したデータを探します。


Dictionaryとの違い

Dictionaryなら

phoneBook[name]

で取得できます。

しかし今回は

List + クラス

で作っています。

理由は

オブジェクト指向を理解するため

です。


List + クラスのメリット

電話帳は将来

名前
電話番号
住所
メール
メモ

のように増えるかもしれません。

その場合

Dictionary<string,string>

では対応できません。

しかし

class PhoneData

なら簡単に拡張できます。


まとめ

今回学んだこと

  • ファイル読み込み
  • Splitによる文字列分割
  • Listの使い方
  • クラスを使ったデータ管理
  • WinFormsのイベント

小さなアプリですが、

実際のアプリ開発の基本

がたくさん含まれています。


訪問数 29 回, 今日の訪問数 3回

広告