[C#] ComboBoxの表示名と値を設定する方法

C#でComboBoxに表示名と値を設定するには、通常、ComboBoxItemsプロパティにオブジェクトを追加し、そのオブジェクトのプロパティを表示名と値として使用します。

例えば、KeyValuePairやカスタムクラスを用いる方法があります。

DisplayMemberプロパティで表示名に使用するプロパティ名を、ValueMemberプロパティで値に使用するプロパティ名を指定します。

これにより、ユーザーには表示名が見え、プログラム内では値を利用できます。

この記事でわかること
  • KeyValuePairを使用してComboBoxに表示名と値を設定する方法
  • カスタムクラスを用いたComboBoxのデータバインドの実装方法
  • データベースやリストからComboBoxにデータをバインドする方法
  • ComboBoxの項目を動的に追加・削除する方法
  • DisplayMemberとValueMemberを設定することで表示名と値を分離する方法

目次から探す

表示名と値の設定方法

C#のWindowsフォームアプリケーションで、ComboBoxに表示名と値を設定する方法について解説します。

ComboBoxはユーザーインターフェースでよく使用されるコントロールで、ユーザーに選択肢を提供する際に便利です。

表示名と値を別々に設定することで、ユーザーにはわかりやすい表示を提供しつつ、プログラム内部では効率的にデータを扱うことができます。

KeyValuePairを使用する方法

KeyValuePairを使用することで、ComboBoxに表示名と値を簡単に設定できます。

KeyValuePairは、キーと値のペアを保持するための構造体で、ComboBoxのデータソースとして利用することができます。

using System;
using System.Collections.Generic;
using System.Windows.Forms;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // KeyValuePairのリストを作成
        List<KeyValuePair<string, string>> items = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("表示名1", "値1"),
            new KeyValuePair<string, string>("表示名2", "値2"),
            new KeyValuePair<string, string>("表示名3", "値3")
        };
        // ComboBoxにデータをバインド
        comboBox1.DataSource = items;
        comboBox1.DisplayMember = "Key"; // 表示名を設定
        comboBox1.ValueMember = "Value"; // 値を設定
    }
}

このコードでは、KeyValuePairのリストを作成し、それをComboBoxのデータソースとして設定しています。

DisplayMemberValueMemberを指定することで、表示名と値をそれぞれ設定しています。

カスタムクラスを使用する方法

カスタムクラスを使用して、ComboBoxに表示名と値を設定することもできます。

カスタムクラスを定義し、そのプロパティを利用して表示名と値を設定します。

using System;
using System.Collections.Generic;
using System.Windows.Forms;
// カスタムクラスの定義
public class ComboBoxItem
{
    public string DisplayName { get; set; } // 表示名
    public string Value { get; set; } // 値
    public ComboBoxItem(string displayName, string value)
    {
        DisplayName = displayName;
        Value = value;
    }
}
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // カスタムクラスのリストを作成
        List<ComboBoxItem> items = new List<ComboBoxItem>
        {
            new ComboBoxItem("表示名1", "値1"),
            new ComboBoxItem("表示名2", "値2"),
            new ComboBoxItem("表示名3", "値3")
        };
        // ComboBoxにデータをバインド
        comboBox1.DataSource = items;
        comboBox1.DisplayMember = "DisplayName"; // 表示名を設定
        comboBox1.ValueMember = "Value"; // 値を設定
    }
}

この例では、ComboBoxItemというカスタムクラスを定義し、そのインスタンスをリストに追加しています。

DisplayMemberValueMemberを指定することで、表示名と値を設定しています。

DisplayMemberとValueMemberの設定

DisplayMemberValueMemberは、ComboBoxに表示する項目の表示名と値を指定するためのプロパティです。

これらを設定することで、ユーザーにはわかりやすい表示を提供しつつ、プログラム内部では効率的にデータを扱うことができます。

  • DisplayMember: ComboBoxに表示する項目のプロパティ名を指定します。
  • ValueMember: ComboBoxの項目に関連付ける値のプロパティ名を指定します。

これらのプロパティを適切に設定することで、ComboBoxの表示と内部データの管理を分離し、柔軟なデータバインディングが可能になります。

KeyValuePairを使用した実装例

KeyValuePairを使用してComboBoxに表示名と値を設定する方法を具体的に解説します。

この方法は、簡潔でありながら柔軟性が高く、特に小規模なデータセットに対して有効です。

KeyValuePairの作成

まず、KeyValuePairを使用して、表示名と値のペアを作成します。

KeyValuePairは、キーと値のペアを保持するための構造体で、リストや配列に格納して使用します。

using System;
using System.Collections.Generic;
using System.Windows.Forms;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // KeyValuePairのリストを作成
        List<KeyValuePair<string, string>> items = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("表示名1", "値1"),
            new KeyValuePair<string, string>("表示名2", "値2"),
            new KeyValuePair<string, string>("表示名3", "値3")
        };
    }
}

このコードでは、KeyValuePairのリストを作成し、各ペアに表示名と値を設定しています。

ComboBoxへのデータバインド

次に、作成したKeyValuePairのリストをComboBoxにバインドします。

これにより、ComboBoxに表示名が表示され、選択された項目の値を取得できるようになります。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // KeyValuePairのリストを作成
        List<KeyValuePair<string, string>> items = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("表示名1", "値1"),
            new KeyValuePair<string, string>("表示名2", "値2"),
            new KeyValuePair<string, string>("表示名3", "値3")
        };
        // ComboBoxにデータをバインド
        comboBox1.DataSource = items;
        comboBox1.DisplayMember = "Key"; // 表示名を設定
        comboBox1.ValueMember = "Value"; // 値を設定
    }
}

このコードでは、DataSourceプロパティを使用してComboBoxにデータをバインドし、DisplayMemberValueMemberを設定することで、表示名と値を指定しています。

選択された値の取得方法

最後に、ユーザーがComboBoxで選択した項目の値を取得する方法を説明します。

選択された項目の値は、SelectedValueプロパティを使用して取得できます。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // 選択された値を取得
    string selectedValue = comboBox1.SelectedValue.ToString();
    MessageBox.Show("選択された値: " + selectedValue);
}

このコードでは、SelectedIndexChangedイベントハンドラを使用して、ユーザーがComboBoxの選択を変更したときに選択された値を取得し、メッセージボックスで表示しています。

SelectedValueプロパティを使用することで、選択された項目に関連付けられた値を簡単に取得できます。

カスタムクラスを使用した実装例

カスタムクラスを使用してComboBoxに表示名と値を設定する方法を解説します。

この方法は、より複雑なデータ構造を扱う場合や、データに対して追加のプロパティやメソッドを持たせたい場合に有効です。

カスタムクラスの定義

まず、ComboBoxに表示するデータを保持するためのカスタムクラスを定義します。

このクラスには、表示名と値を保持するプロパティを含めます。

using System;
using System.Collections.Generic;
using System.Windows.Forms;
// カスタムクラスの定義
public class ComboBoxItem
{
    public string DisplayName { get; set; } // 表示名
    public string Value { get; set; } // 値
    public ComboBoxItem(string displayName, string value)
    {
        DisplayName = displayName;
        Value = value;
    }
}

このコードでは、ComboBoxItemというカスタムクラスを定義し、DisplayNameValueという2つのプロパティを持たせています。

ComboBoxへのデータバインド

次に、カスタムクラスのインスタンスを作成し、それをComboBoxにバインドします。

これにより、ComboBoxに表示名が表示され、選択された項目の値を取得できるようになります。

using System.Collections.Generic;
using System.Windows.Forms;

public partial class MyForm : Form
{
	public MyForm()
	{
		InitializeComponent();
		// KeyValuePairのリストを作成
		List<KeyValuePair<string, string>> items = new List<KeyValuePair<string, string>>
		{
			new KeyValuePair<string, string>("表示名1", "値1"),
			new KeyValuePair<string, string>("表示名2", "値2"),
			new KeyValuePair<string, string>("表示名3", "値3")
		};
		// ComboBoxにデータをバインド
		comboBox1.DataSource = items;
		// KeyValuePairのプロパティ名はKeyとValue
		comboBox1.DisplayMember = "Key"; // 表示名を設定
		comboBox1.ValueMember = "Value"; // 値を設定

	}
}

このコードでは、ComboBoxItemのリストを作成し、それをComboBoxのデータソースとして設定しています。

DisplayMemberValueMemberを指定することで、表示名と値を設定しています。

選択された値の取得方法

最後に、ユーザーがComboBoxで選択した項目の値を取得する方法を説明します。

選択された項目の値は、SelectedValueプロパティを使用して取得できます。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // 選択された値を取得
    string selectedValue = comboBox1.SelectedValue.ToString();
    MessageBox.Show("選択された値: " + selectedValue);
}

このコードでは、SelectedIndexChangedイベントハンドラを使用して、ユーザーがComboBoxの選択を変更したときに選択された値を取得し、メッセージボックスで表示しています。

SelectedValueプロパティを使用することで、選択された項目に関連付けられた値を簡単に取得できます。

応用例

ComboBoxの表示名と値の設定方法を応用して、さまざまなデータソースからデータをバインドする方法や、動的に項目を操作する方法を解説します。

データベースからのデータバインド

データベースから取得したデータをComboBoxにバインドすることで、動的なデータ表示が可能になります。

以下は、データベースからデータを取得してComboBoxにバインドする例です。

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // データベース接続文字列
        string connectionString = "Data Source=サーバー名;Initial Catalog=データベース名;User ID=ユーザー名;Password=パスワード";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            SqlCommand command = new SqlCommand("SELECT 表示名列, 値列 FROM テーブル名", connection);
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable dataTable = new DataTable();
            adapter.Fill(dataTable);
            // ComboBoxにデータをバインド
            comboBox1.DataSource = dataTable;
            comboBox1.DisplayMember = "表示名列"; // 表示名を設定
            comboBox1.ValueMember = "値列"; // 値を設定
        }
    }
}

このコードでは、SQL Serverデータベースからデータを取得し、DataTableに格納してからComboBoxにバインドしています。

リストや配列からのデータバインド

リストや配列からデータをComboBoxにバインドする方法も非常に便利です。

以下は、リストからデータをバインドする例です。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // リストを作成
        List<string> items = new List<string> { "項目1", "項目2", "項目3" };
        // ComboBoxにデータをバインド
        comboBox1.DataSource = items;
    }
}

このコードでは、文字列のリストを作成し、それをComboBoxのデータソースとして設定しています。

配列を使用する場合も同様に設定できます。

動的に項目を追加・削除する方法

ComboBoxに動的に項目を追加したり削除したりすることも可能です。

以下は、項目を動的に操作する例です。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // 初期項目を追加
        comboBox1.Items.Add("初期項目1");
        comboBox1.Items.Add("初期項目2");
    }
    private void AddItemButton_Click(object sender, EventArgs e)
    {
        // 新しい項目を追加
        comboBox1.Items.Add("新しい項目");
    }
    private void RemoveItemButton_Click(object sender, EventArgs e)
    {
        // 選択された項目を削除
        if (comboBox1.SelectedIndex >= 0)
        {
            comboBox1.Items.RemoveAt(comboBox1.SelectedIndex);
        }
    }
}

このコードでは、ボタンのクリックイベントを使用して、ComboBoxに新しい項目を追加したり、選択された項目を削除したりしています。

Itemsプロパティを使用することで、項目の追加や削除が簡単に行えます。

よくある質問

ComboBoxに表示される順序を変更するには?

ComboBoxに表示される項目の順序を変更するには、データソースをソートする必要があります。

データソースがリストの場合、Sortメソッドを使用してソートできます。

例:items.Sort();

データソースがDataTableの場合、DataViewを使用してソートすることができます。

例:dataTable.DefaultView.Sort = "表示名列 ASC";

選択された項目をプログラムで変更するには?

ComboBoxの選択された項目をプログラムで変更するには、SelectedIndexまたはSelectedItemプロパティを使用します。

例:comboBox1.SelectedIndex = 0;で最初の項目を選択できます。

また、特定の項目を選択するには、comboBox1.SelectedItem = "項目名";を使用します。

ComboBoxの選択をクリアする方法は?

ComboBoxの選択をクリアするには、SelectedIndexプロパティを-1に設定します。

例:comboBox1.SelectedIndex = -1;

これにより、ComboBoxの選択が解除され、何も選択されていない状態になります。

まとめ

この記事では、C#のWindowsフォームアプリケーションにおけるComboBoxの表示名と値の設定方法について、KeyValuePairやカスタムクラスを用いた具体的な実装例を通じて解説しました。

これにより、ComboBoxを用いた柔軟なデータバインディングの手法を学び、データベースやリストからのデータバインド、動的な項目の操作方法についても理解を深めることができたでしょう。

これらの知識を活用して、よりユーザーフレンドリーで効率的なアプリケーションを開発してみてください。

  • URLをコピーしました!
目次から探す