【WinForms実践】Dictionaryで作る電話帳アプリ

― 外部ファイルを安全に読み込む方法 ―


■ 今回作るアプリ

今回作成するのは、

  • data.txt からデータを読み込む
  • 名前を ListBox に表示する
  • 名前を選択すると電話番号を表示する

という電話帳アプリです。


■ フォームの基本構造

Form1 では次のような流れで処理を行います。

  1. Dictionary を用意する
  2. data.txt を読み込む
  3. 名前をリストに表示する
  4. 選択された名前に対応する電話番号を表示する

■ フィールド宣言

Dictionary<string, string> phoneBook;

Dictionary<string, string> は、

  • キー(名前)
  • 値(電話番号)

という対応関係を管理するために使用します。


■ コンストラクタ

public Form1()
{
    InitializeComponent();

    // 電話帳を初期化
    this.phoneBook = new Dictionary<string, string>();

    // ファイルから読み込み
    ReadFromFile();

    // 名前をリストに表示
    foreach (KeyValuePair<string, string> data in phoneBook)
    {
        this.nameList.Items.Add(data.Key);
    }
}

ここで、

  • Dictionary の初期化
  • ファイル読み込み
  • ListBox への表示

を行っています。


■ ファイル読み込み処理

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(',');

            this.phoneBook.Add(data[0], data[1]);
        }
    }
}

■ data.txt の形式

山田太郎,090-1111-1111
佐藤花子,080-2222-2222
田中一郎,070-3333-3333

1行につき

名前,電話番号

という形式になっています。

Split(’,’) によって分割しています。


■ なぜ “data.txt” で読み込めるのか?

data.txt のプロパティを

  • ビルドアクション:Content
  • 出力ディレクトリにコピー:常にコピーする

に設定している場合、

実行時には

bin\Debug\data.txt

にコピーされます。

プログラムも同じフォルダで実行されるため、

new StreamReader("data.txt")

で読み込むことができます。


■ 名前選択時の処理

private void NameSelected(object sender, EventArgs e)
{
    string name = this.nameList.Text;
    this.phoneNumber.Text = this.phoneBook[name];
}

流れは次の通りです。

  1. ListBox で選択された名前を取得
  2. Dictionary から対応する電話番号を取得
  3. TextBox に表示

Dictionary を使うことで、

「名前 → 電話番号」の検索が高速に行えます。


■ 重要な理解ポイント

  • Dictionary は「対応関係」を扱うコレクション
  • 外部ファイルは実行フォルダから読み込まれる
  • Split(’,’) でデータを分割している
  • ListBox と Dictionary を連携させている

■ まとめ

このアプリでは、

  • コレクション(Dictionary)
  • ファイル読み込み(StreamReader)
  • 文字列分割(Split)
  • UI連携(ListBox, TextBox)

といった重要な技術が組み合わされています。

構造を理解すると、応用範囲は大きく広がります。


訪問数 43 回, 今日の訪問数 43回

C#,Dictionary

Posted by hidepon