【学習】WinForms でリストの気持ちをつなぐ(Label と Button だけ)

広告

コンソールまでで、Player と List と foreach のイメージができたら、次は 画面に載せたい という気持ちが自然に出ます。

しかしいきなり ListBox やデータバインディングに入ると、「UI の話」と「データの話」が同時に来る ことがあります。

今回は 新しいコントロールを増やさず、WinForms 入門で既に出てくる Label と Button だけで、List<Player> をフィールドに持ち、クリックで一覧の内容を更新します。


前提

次の記事を読んでいる想定です。


今日作るもの

  • フォーム上の Label に、複数プレイヤーの HP 状況を表示する
  • Button を押すと全員に少しダメージが入り、表示が更新される

ListBox はまだ使いません。データはコード側の List<Player> が正 で、Label は「その写しを文字で見せる」役です。


ソリューションとプロジェクトを作る

  • テンプレート: Windows Forms アプリ(.NET Framework でも Windows Forms でも可。学校の環境に合わせてください)
  • プロジェクト名ListBridgeWinForms(任意)

フォームに配置するコントロール

コントロール名前(例)
LabelstatusLabel
ButtondamageButton

statusLabel の AutoSize を false にし、幅を広めに取ると複数行が見やすいです。


フォームに List を持たせる

Form1.cs の先頭付近に using System.Collections.Generic; を追加します。

Form1 のクラスに フィールド を追加します。

private List<Player> players = new List<Player>();

Player クラスは別ファイルでも Form1.cs の下でも構いません。授業では 同じ名前空間 に置けば動きます。

public class Player
{
    public string Name;
    public int Hp;

    public Player(string name, int hp)
    {
        Name = name;
        Hp = hp;
    }
}

(シリーズ第1回〜と同じく フィールド+コンストラクタ にしています。プロパティ版に置き換えても構いません。)


ロード時に List を初期化する

Form1 のコンストラクタまたは Load イベントで players に追加します。

public Form1()
{
    InitializeComponent();

    players.Add(new Player("勇者A", 100));
    players.Add(new Player("勇者B", 90));
    players.Add(new Player("勇者C", 80));

    RefreshStatusLabel();
}

RefreshStatusLabel は次のように foreach で文字列を組み立てる メソッドです。

private void RefreshStatusLabel()
{
    var lines = new System.Text.StringBuilder();
    foreach (Player p in players)
    {
        lines.AppendLine($"{p.Name}  HP={p.Hp}");
    }
    statusLabel.Text = lines.ToString();
}

Button のクリックで全員にダメージ

private void damageButton_Click(object sender, EventArgs e)
{
    foreach (Player p in players)
    {
        p.Hp -= 10;
    }
    RefreshStatusLabel();
}

プログラムの流れ

フォームが持つ List<Player> がデータの本体
        ↓
Label は「人間が読むための表示」
        ↓
Button イベントで List の中身を変更 → 表示を更新

重要ポイント

  • 一覧 UI(ListBox)の前段階 として、「List をフィールドで持つ」感覚を固めるのが目的です
  • 表示は 文字を連結して1つの Label に出す だけでも、授業や個人学習には十分使えます
  • 次のステップとして、一覧・選択・追加まで進むなら WinForms で作る電話帳アプリ(List で管理する版) がそのまま続きになります

発展アイデア

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

広告