ComboBoxの要素にクラスオブジェクトを割り当てるコードを紹介します。
こちらの記事では、ComboBoxのItemプロパティのAddメソッドでString型の変数を与えることで、コンボボックスに要素を追加するコードを紹介しました。しかし、ComboBoxに表示する要素と別の値を保持したいことや、クラスオブジェクトをコンボボックスのドロップダウンリストの要素に割り当てたいことがあります。
ComboBoxのItemの要素にクラスオブジェクトを割り当てる場合は、Items.Addメソッドで割り当てたいクラスオブジェクトを引数として与えます。クラスオブジェクトを引数として与えた場合、コンボボックスのドロップダウンメニューに表示される文字列はクラスを表す文字列になるため、表示する文字を設定するためにクラスにToString()メソッドを実装します。
下図のUIを作成します。
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ComboBoxDemo
{
public partial class FormAssignObject : Form
{
public FormAssignObject()
{
InitializeComponent();
}
private void FormAssignObject_Load(object sender, EventArgs e)
{
ComboBoxCustomItem cbci1 = new ComboBoxCustomItem();
cbci1.text = "要素1";
cbci1.id = 1001;
cbci1.key = "Key1";
ComboBoxCustomItem cbci2 = new ComboBoxCustomItem();
cbci2.text = "要素2";
cbci2.id = 1002;
cbci2.key = "Key2";
ComboBoxCustomItem cbci3 = new ComboBoxCustomItem();
cbci3.text = "要素3";
cbci3.id = 1003;
cbci3.key = "Key3";
ComboBoxCustomItem cbci4 = new ComboBoxCustomItem();
cbci4.text = "要素4";
cbci4.id = 1004;
cbci4.key = "Key4";
ComboBoxCustomItem cbci5 = new ComboBoxCustomItem();
cbci5.text = "要素5";
cbci5.id = 1005;
cbci5.key = "Key5";
comboBox1.Items.Add(cbci1);
comboBox1.Items.Add(cbci2);
comboBox1.Items.Add(cbci3);
comboBox1.Items.Add(cbci4);
comboBox1.Items.Add(cbci5);
}
private void button1_Click(object sender, EventArgs e)
{
ComboBoxCustomItem cbci = (ComboBoxCustomItem)comboBox1.SelectedItem;
textBox1.Text += string.Format("ID:{0:d}\r\n", cbci.id);
textBox1.Text += string.Format("Key:{0:s}\r\n", cbci.key);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ComboBoxDemo
{
public class ComboBoxCustomItem
{
public string text;
public int id;
public string key;
public override string ToString()
{
return text;
}
}
}
ComboBoxCustomItemクラスがコンボボックスの要素に挿入するオブジェクトのクラスです。今回はtext,id,keyの3つのメンバ変数を実装しています。コンボボックスに表示する文字列を設定するToStringメソッドをComboBoxCustomItemクラスに実装しています。今回はtext変数の内容をそのままコンボボックスに表示します。
Form側(FormAssignObject)はフォームのLoad時にComboBoxCustomItemクラスのインスタンスを5つ作成しコンボボックスに追加しています。Buttonのクリック時にはコンボボックスで選択されているComboBoxCustomItemのオブジェクトを取得しメンバ変数の内容をテキストボックスに表示します。
プロジェクトを実行します。下図の画面が表示されます。
コンボボックスを開きドロップダウンリストを表示します。リストから要素を選択します。
コンボボックスで要素が選択できた後、ボタンをクリックします。
下部のテキストボックスに要素に設定したオブジェクトのIDとKeyが表示されます。
選択した要素に関連付けたオブジェクトの情報が取得できました。