コンボボックスの要素にオブジェクトを割り当てる - ComboBox.Item にクラスオブジェクトを挿入する

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

概要

こちらの記事では、ComboBoxのItemプロパティのAddメソッドでString型の変数を与えることで、コンボボックスに要素を追加するコードを紹介しました。しかし、ComboBoxに表示する要素と別の値を保持したいことや、クラスオブジェクトをコンボボックスのドロップダウンリストの要素に割り当てたいことがあります。

ComboBoxのItemの要素にクラスオブジェクトを割り当てる場合は、Items.Addメソッドで割り当てたいクラスオブジェクトを引数として与えます。クラスオブジェクトを引数として与えた場合、コンボボックスのドロップダウンメニューに表示される文字列はクラスを表す文字列になるため、表示する文字を設定するためにクラスにToString()メソッドを実装します。

UI

下図のUIを作成します。
コンボボックスの要素にオブジェクトを割り当てる - ComboBox.Item にクラスオブジェクトを挿入する:画像1

コード

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

FormAssignObject.cs
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);
    }
  }
}

ComboBoxCustomItem.cs
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のオブジェクトを取得しメンバ変数の内容をテキストボックスに表示します。

実行結果

プロジェクトを実行します。下図の画面が表示されます。
コンボボックスの要素にオブジェクトを割り当てる - ComboBox.Item にクラスオブジェクトを挿入する:画像2

コンボボックスを開きドロップダウンリストを表示します。リストから要素を選択します。
コンボボックスの要素にオブジェクトを割り当てる - ComboBox.Item にクラスオブジェクトを挿入する:画像3

コンボボックスで要素が選択できた後、ボタンをクリックします。
コンボボックスの要素にオブジェクトを割り当てる - ComboBox.Item にクラスオブジェクトを挿入する:画像4

下部のテキストボックスに要素に設定したオブジェクトのIDとKeyが表示されます。
コンボボックスの要素にオブジェクトを割り当てる - ComboBox.Item にクラスオブジェクトを挿入する:画像5

選択した要素に関連付けたオブジェクトの情報が取得できました。


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2014-01-07
Copyright © 1995–2025 iPentec all rights reserverd.