データソースを独自に作成してListBoxに割り当てて要素を表示するコードを紹介します。
下図のUIを作成します。フォームにListBox, Button, TextBoxを1つずつ配置します。
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 ListBoxDemo
{
public partial class FormListBoxObject : Form
{
List<MyItem> ListBoxItem = new List<MyItem>();
public FormListBoxObject()
{
InitializeComponent();
MyItem mi;
mi = new MyItem("シロクマ", "北極");
ListBoxItem.Add(mi);
mi = new MyItem("ペンギン", "南極");
ListBoxItem.Add(mi);
mi = new MyItem("ラクダ", "砂漠");
ListBoxItem.Add(mi);
mi = new MyItem("カンガルー", "オーストラリア");
ListBoxItem.Add(mi);
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Place";
listBox1.DataSource = ListBoxItem;
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = string.Format("{0:s} , {1:s}",
((MyItem)listBox1.SelectedItem).Name, listBox1.SelectedValue.ToString());
}
}
}
List<MyItem> ListBoxItem = new List<MyItem>();
上記がListBoxのデータソースに指定する"List<MyItem>"オブジェクトです。
MyItem mi;
mi = new MyItem("シロクマ", "北極");
ListBoxItem.Add(mi);
mi = new MyItem("ペンギン", "南極");
ListBoxItem.Add(mi);
mi = new MyItem("ラクダ", "砂漠");
ListBoxItem.Add(mi);
mi = new MyItem("カンガルー", "オーストラリア");
ListBoxItem.Add(mi);
フォームのコンストラクタ中の上記コードにより"List<MyItem>"オブジェクトに要素を追加します。 listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Place";
listBox1.DataSource = ListBoxItem;
上記コードにより作成した"List<MyItem>"オブジェクトをListBoxのDataSourceプロパティに設定します。DataSourceプロパティへオブジェクトを設定する前に、DisplayMember, ValueMemberを設定します。DisplayMemberはListBoxの要素が画面に表示される際の文字列のキーを与えます。ListBoxの要素MyItemはName,Placeのプロパティを持つためDisplayMemberに"Name"を指定することで、MyItemの"Name"プロパティの値をListBoxの要素として画面へ表示できます。また、ValueMemberを"Place"に指定することで"ListBox.SelectedValue"により選択されている要素の値としてMyItemオブジェクトの"Place"の値を取得できます。また、SlectedItemプロパティには選択されている要素のMyItemオブジェクトが指定されます。
上記のコードは選択した要素のキャプションの"Name"とSelectedValueに設定された"Place"の値をテキストボックスに表示します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ListBoxDemo
{
class MyItem
{
string mName;
string mPlace;
public MyItem()
{
}
public MyItem(string name, string place)
{
mName = name;
mPlace = place;
}
public string Name
{
set
{
mName = value;
}
get
{
return mName;
}
}
public string Place
{
set
{
mPlace = value;
}
get
{
return mPlace;
}
}
}
}
ListBox設定するデータソースの要素クラスです。"Name"と"Place"のstring型のプロパティを持つクラスです。コンストラクタに引数をとることができ、newした際にName,Placeに値を設定できる動作になっています。
プロジェクトを実行します。下図のウィンドウが表示されます。
左側のListBoxの要素をクリックして選択します。
選択後ボタンを押します。選択された要素のテキストと、要素の値がTextBoxに表示されます。