ListViewの要素にオブジェクトを割り当てる - C#

ListViewの要素にオブジェクトを割り当てるコードを紹介します。

UI

下図のUIを作成します。ListView, TextBoxを3つ配置します。

ImageList プロパティ

ImageListのプロパティを設定します。アイコンを追加しColorDepth, ImageSizeプロパティを設定します。

ListView プロパティ

ListViewの LargeImageListプロパティを設定します。

コード

以下のコードを記述します。

FormMain.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ListViewDemo
{
  public partial class FormObjectAssign : Form
  {
    public FormObjectAssign()
    {
      InitializeComponent();
    }

    private void FormObjectAssign_Load(object sender, EventArgs e)
    {
      ListViewItem lvi;
      ItemInfo ii;

      lvi = new ListViewItem("Penguin",0);
      ii = new ItemInfo();
      ii.Name = "ペンギン";
      ii.Address = "南極";
      ii.Age = 3;
      lvi.Tag = ii;
      listView1.Items.Add(lvi);

      
      lvi = new ListViewItem("Chicken", 1);
      ii = new ItemInfo();
      ii.Name = "にわとり";
      ii.Address = "養鶏所";
      ii.Age = 1;
      lvi.Tag = ii;
      listView1.Items.Add(lvi);
      
      lvi = new ListViewItem("Pig", 2);
      ii = new ItemInfo();
      ii.Name = "ブタ";
      ii.Address = "養豚所";
      ii.Age = 2;
      lvi.Tag = ii;
      listView1.Items.Add(lvi);

      lvi = new ListViewItem("Whale", 3);
      ii = new ItemInfo();
      ii.Name = "クジラ";
      ii.Address = "太平洋";
      ii.Age = 20;
      lvi.Tag = ii;
      listView1.Items.Add(lvi);
    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
      ItemInfo ii =null;

      if (listView1.SelectedItems.Count > 0) {
        ii = (ItemInfo)listView1.SelectedItems[0].Tag;
      }

      if (ii != null) {
        textBox1.Text = ii.Name;
        textBox2.Text = ii.Address;
        textBox3.Text = ii.Age.ToString();
      }
      else {
        textBox1.Text = "";
        textBox2.Text = "";
        textBox3.Text = "";
      }

    }
  }
}

ItemInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ListViewDemo
{
  public class ItemInfo
  {
    public string Name;
    public string Address;
    public int Age;
  }
}

解説

FormMain.cs

Load イベント
ListViewに要素を追加するとともに、要素ごとにItemInfoクラスのインスタンスを作成します。作成したItemInfoインスタンスはListViewItemのtagプロパティに代入します。tagプロパティはListViewItemごとにObject型の値を保持できるプロパティです。
SelectedIndexChanged イベント
ListViewの選択要素が変更されると呼び出されるイベントです。

  ItemInfo ii =null;

  if (listView1.SelectedItems.Count > 0) {
    ii = (ItemInfo)listView1.SelectedItems[0].Tag;
  }
ListViewの要素が選択されているか確認し、要素が選択されている場合は最初に選択されている要素のTagプロパティに代入されているItemInfoクラスのオブジェクトを取得ます。

  if (ii != null) {
    textBox1.Text = ii.Name;
    textBox2.Text = ii.Address;
    textBox3.Text = ii.Age.ToString();
  }
  else {
    textBox1.Text = "";
    textBox2.Text = "";
    textBox3.Text = "";
  }
ItemInfoオブジェクト有効であった場合は、ItemInfoオブジェクトのメンバ変数をテキストボックスに表示します。

ItemInfo.cs

ListViewの要素ごとの値を格納するためのクラスです。Name, Address, Ageの3つのメンバ変数を持ちます。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


要素を選択するとその要素に割り当てたItemInfoオブジェクトのメンバ変数の値が下部のテキストボックスに表示されます。


他の要素を選択すると、テキストボックスの値が変わります。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2013-06-05
iPentec all rights reserverd.