[ VB.NET / C# ] コンボボックスにクラスオブジェクトをアイテムとして追加する

Pocket

コンボボックスに項目を追加するサンプルコードになります。ポイントは、追加するアイテムはオブジェクト ( object ) であり、文字列だけではない点です。 もちろん文字列をそのまま追加することも可能ですが、選択時に取得したい項目が複数あるような場合などでは使い勝手が悪いです。

スポンサーリンク

コンボボックスにクラスオブジェクトをアイテムとして追加する

以下のサンプルでは、任意のオブジェクトをコンボボックスに追加し、表示されるテキストも ToString メソッドをオーバーライドして編集しています。詳細はコメントを参照ください。

VB.NET

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load

        ' 追加するオブジェクトを作成
        Dim item1 As New CmbItem("value1", "text1")
        Dim item2 As New CmbItem("value2", "text2")

        ' コンボボックスにアイテムを追加
        Me.ComboBox1.Items.Add(item1)
        Me.ComboBox1.Items.Add(item2)

        ' 一つ目のアイテムを選択状態にする
        Me.ComboBox1.SelectedIndex = 0

        ' 選択されているオブジェクトを取得
        Dim selectedItem As CmbItem = DirectCast(Me.ComboBox1.SelectedItem, CmbItem)

        MessageBox.Show(selectedItem.Value) ' value1
        MessageBox.Show(selectedItem.Text) ' text1

    End Sub

    ''' <summary>
    ''' コンボボックスに追加するオブジェクト
    ''' </summary>
    Public Class CmbItem

        Public Text As String
        Public Value As String

        Public Sub New(ByVal value As String, ByVal text As String)
            Me.Text = text
            Me.Value = value
        End Sub

       ''' <summary>
       ''' Object.ToString メソッドをオーバーライドし
       ''' コンボボックスに表示されるテキストを設定する
       ''' </summary>
       Public Overrides Function ToString() As String
           Return Me.Text + "!!"
       End Function
    End Class

End Class

C#

※ C# のサンプルコードでは自動実装プロパティを使用しているため、C#2008 以降の環境が必要となります。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // 追加するオブジェクトを作成
        CmbItem item1 = new CmbItem("value1", "text1");
        CmbItem item2 = new CmbItem("value2", "text2");

        // コンボボックスにアイテムを追加
        this.comboBox1.Items.Add(item1);
        this.comboBox1.Items.Add(item2);

        // 一つ目のアイテムを選択状態にする
        this.comboBox1.SelectedIndex = 0;

        // 選択されているオブジェクトを取得
        CmbItem selectedItem = (CmbItem)this.comboBox1.SelectedItem;

        MessageBox.Show(selectedItem.Value); // value1
        MessageBox.Show(selectedItem.Text); // text1
    }

    /// <summary>
    /// コンボボックスに追加するオブジェクト
    /// </summary>
    public class CmbItem
    {
        public string Text { get; set; }
        public string Value { get; set; }

        public CmbItem(string value, string text)
        {
            this.Text = text;
            this.Value = value;
        }

        /// <summary>
        /// Object.ToString メソッドをオーバーライドし
        /// コンボボックスに表示されるテキストを設定する
        /// </summary>
        public override string ToString()
        {
            return this.Text + "!!";
        }
    }
}
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *