[C#] ComboBoxで選択された値を取得する方法

C#でComboBoxから選択された値を取得するには、ComboBoxコントロールのSelectedItemまたはSelectedValueプロパティを使用します。

SelectedItemは選択された項目全体を返し、SelectedValueValueMemberプロパティで指定された値を返します。

例えば、comboBox1.SelectedItem.ToString()を使用すると、選択された項目の文字列表現を取得できます。

また、SelectedIndexプロパティを使用して選択された項目のインデックスを取得することも可能です。

これらのプロパティを使うことで、ユーザーが選択した情報を簡単に取得し、アプリケーションの他の部分で利用できます。

この記事でわかること
  • ComboBoxで選択された値を取得するための基本的なプロパティの使い方
  • データバインディングを利用したComboBoxの設定方法とその利点
  • ComboBoxを用いた実践的なアプリケーションの構築方法
  • 複数のComboBoxを連動させる方法とその実装例
  • データベースからのデータをComboBoxに表示する手法

目次から探す

ComboBoxで選択された値を取得する方法

C#のWindowsフォームアプリケーションで、ComboBoxはユーザーに選択肢を提供するための便利なコントロールです。

ここでは、ComboBoxで選択された値を取得する方法について解説します。

SelectedItemプロパティの使用

SelectedItemプロパティは、ComboBoxで現在選択されている項目を取得するために使用します。

このプロパティはオブジェクト型を返すため、必要に応じてキャストを行う必要があります。

using System;
using System.Windows.Forms;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        ComboBox comboBox = new ComboBox();
        comboBox.Items.Add("りんご");
        comboBox.Items.Add("バナナ");
        comboBox.Items.Add("オレンジ");
        comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
        Controls.Add(comboBox);
    }
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;
        // 選択された項目を取得
        string selectedItem = (string)comboBox.SelectedItem;
        MessageBox.Show("選択された項目: " + selectedItem);
    }
}

このコードでは、ComboBoxのSelectedIndexChangedイベントを使用して、選択された項目を取得し、メッセージボックスで表示しています。

SelectedValueプロパティの使用

SelectedValueプロパティは、ComboBoxがデータバインディングされている場合に、選択された項目の値を取得するために使用します。

ValueMemberプロパティを設定する必要があります。

using System;
using System.Windows.Forms;
using System.Data;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        ComboBox comboBox = new ComboBox();
        DataTable table = new DataTable();
        table.Columns.Add("Name");
        table.Columns.Add("Value");
        table.Rows.Add("りんご", 1);
        table.Rows.Add("バナナ", 2);
        table.Rows.Add("オレンジ", 3);
        comboBox.DataSource = table;
        comboBox.DisplayMember = "Name";
        comboBox.ValueMember = "Value";
        comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
        Controls.Add(comboBox);
    }
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;
        // 選択された値を取得
        int selectedValue = (int)comboBox.SelectedValue;
        MessageBox.Show("選択された値: " + selectedValue);
    }
}

この例では、DataTableをデータソースとしてComboBoxにバインドし、SelectedValueプロパティを使用して選択された値を取得しています。

SelectedIndexプロパティの使用

SelectedIndexプロパティは、ComboBoxで選択されている項目のインデックスを取得します。

インデックスは0から始まります。

using System;
using System.Windows.Forms;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        ComboBox comboBox = new ComboBox();
        comboBox.Items.Add("りんご");
        comboBox.Items.Add("バナナ");
        comboBox.Items.Add("オレンジ");
        comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
        Controls.Add(comboBox);
    }
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;
        // 選択されたインデックスを取得
        int selectedIndex = comboBox.SelectedIndex;
        MessageBox.Show("選択されたインデックス: " + selectedIndex);
    }
}

このコードでは、SelectedIndexプロパティを使用して、選択された項目のインデックスを取得し、メッセージボックスで表示しています。

インデックスは、選択されていない場合は-1を返します。

ComboBoxのデータバインディング

ComboBoxは、データバインディングを利用することで、データソースから直接データを表示することができます。

これにより、データの管理が容易になり、コードの可読性も向上します。

ここでは、ComboBoxのデータバインディングについて詳しく解説します。

データソースの設定方法

ComboBoxにデータをバインドするためには、DataSourceプロパティを使用します。

データソースとしては、DataTableList<T>などが利用できます。

using System;
using System.Windows.Forms;
using System.Data;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        ComboBox comboBox = new ComboBox();
        DataTable table = new DataTable();
        table.Columns.Add("Name");
        table.Columns.Add("Value");
        table.Rows.Add("りんご", 1);
        table.Rows.Add("バナナ", 2);
        table.Rows.Add("オレンジ", 3);
        // データソースを設定
        comboBox.DataSource = table;
        Controls.Add(comboBox);
    }
}

この例では、DataTableを作成し、DataSourceプロパティに設定しています。

これにより、ComboBoxはDataTableのデータを表示します。

DisplayMemberとValueMemberの設定

データバインディングを行う際に、表示する項目とその値を指定するために、DisplayMemberValueMemberプロパティを設定します。

using System;
using System.Windows.Forms;
using System.Data;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        ComboBox comboBox = new ComboBox();
        DataTable table = new DataTable();
        table.Columns.Add("Name");
        table.Columns.Add("Value");
        table.Rows.Add("りんご", 1);
        table.Rows.Add("バナナ", 2);
        table.Rows.Add("オレンジ", 3);
        comboBox.DataSource = table;
        // 表示する列を設定
        comboBox.DisplayMember = "Name";
        // 値として使用する列を設定
        comboBox.ValueMember = "Value";
        Controls.Add(comboBox);
    }
}

このコードでは、DisplayMemberに”Name”列、ValueMemberに”Value”列を設定しています。

これにより、ComboBoxには”Name”列の値が表示され、選択された項目の値として”Value”列の値が使用されます。

データバインディング時の値の取得

データバインディングされたComboBoxから選択された値を取得するには、SelectedValueプロパティを使用します。

using System;
using System.Windows.Forms;
using System.Data;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        ComboBox comboBox = new ComboBox();
        DataTable table = new DataTable();
        table.Columns.Add("Name");
        table.Columns.Add("Value");
        table.Rows.Add("りんご", 1);
        table.Rows.Add("バナナ", 2);
        table.Rows.Add("オレンジ", 3);
        comboBox.DataSource = table;
        comboBox.DisplayMember = "Name";
        comboBox.ValueMember = "Value";
        comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
        Controls.Add(comboBox);
    }
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;
        // 選択された値を取得
        int selectedValue = (int)comboBox.SelectedValue;
        MessageBox.Show("選択された値: " + selectedValue);
    }
}

この例では、SelectedValueプロパティを使用して、選択された項目の値を取得し、メッセージボックスで表示しています。

データバインディングを利用することで、データの管理がより効率的になります。

実践例:ComboBoxの値を使ったアプリケーション

ここでは、ComboBoxを使用した簡単なアプリケーションを作成し、選択された値を取得して表示する方法を解説します。

この例では、ComboBoxに選択肢を追加し、選択された値をラベルに表示します。

フォームにComboBoxを追加する

まず、フォームにComboBoxを追加し、選択肢を設定します。

using System;
using System.Windows.Forms;
public partial class MyForm : Form
{
    private ComboBox comboBox;
    private Label label;
    public MyForm()
    {
        InitializeComponent();
        // ComboBoxを作成
        comboBox = new ComboBox();
        comboBox.Items.Add("りんご");
        comboBox.Items.Add("バナナ");
        comboBox.Items.Add("オレンジ");
        comboBox.Location = new System.Drawing.Point(20, 20);
        Controls.Add(comboBox);
        // Labelを作成
        label = new Label();
        label.Location = new System.Drawing.Point(20, 60);
        label.AutoSize = true;
        Controls.Add(label);
    }
}

このコードでは、ComboBoxLabelをフォームに追加しています。

ComboBoxには3つの選択肢を設定しています。

イベントハンドラで選択値を取得する

次に、ComboBoxの選択が変更されたときに選択された値を取得するためのイベントハンドラを追加します。

public MyForm()
{
    InitializeComponent();
    comboBox = new ComboBox();
    comboBox.Items.Add("りんご");
    comboBox.Items.Add("バナナ");
    comboBox.Items.Add("オレンジ");
    comboBox.Location = new System.Drawing.Point(20, 20);
    comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged; // イベントハンドラを追加
    Controls.Add(comboBox);
    label = new Label();
    label.Location = new System.Drawing.Point(20, 60);
    label.AutoSize = true;
    Controls.Add(label);
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    ComboBox comboBox = (ComboBox)sender;
    // 選択された項目を取得
    string selectedItem = (string)comboBox.SelectedItem;
    label.Text = "選択された項目: " + selectedItem;
}

このコードでは、SelectedIndexChangedイベントを使用して、選択された項目を取得し、ラベルに表示するようにしています。

選択値をラベルに表示する

最後に、選択された値をラベルに表示する処理を確認します。

上記のコードで、ComboBox_SelectedIndexChangedメソッド内で選択された項目をラベルに設定しています。

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    ComboBox comboBox = (ComboBox)sender;
    // 選択された項目を取得
    string selectedItem = (string)comboBox.SelectedItem;
    // ラベルに選択された項目を表示
    label.Text = "選択された項目: " + selectedItem;
}

このアプリケーションを実行すると、ComboBoxで選択された項目がラベルに表示されます。

これにより、ユーザーが選択した内容をリアルタイムで確認することができます。

応用例

ComboBoxは、基本的な使用法に加えて、さまざまな応用が可能です。

ここでは、複数のComboBoxを連動させる方法、選択値に応じたUIの動的変更、データベースからのデータをComboBoxに表示する方法について解説します。

複数のComboBoxを連動させる

複数のComboBoxを連動させることで、選択肢を動的に変更することができます。

例えば、国と都市の選択を連動させる場合を考えます。

using System;
using System.Windows.Forms;
using System.Collections.Generic;
public partial class MyForm : Form
{
    private ComboBox countryComboBox;
    private ComboBox cityComboBox;
    private Dictionary<string, List<string>> countryCityMap = new Dictionary<string, List<string>>()
    {
        { "日本", new List<string> { "東京", "大阪", "京都" } },
        { "アメリカ", new List<string> { "ニューヨーク", "ロサンゼルス", "シカゴ" } },
        { "フランス", new List<string> { "パリ", "リヨン", "マルセイユ" } }
    };
    public MyForm()
    {
        InitializeComponent();
        countryComboBox = new ComboBox();
        countryComboBox.Items.AddRange(new string[] { "日本", "アメリカ", "フランス" });
        countryComboBox.Location = new System.Drawing.Point(20, 20);
        countryComboBox.SelectedIndexChanged += CountryComboBox_SelectedIndexChanged;
        Controls.Add(countryComboBox);
        cityComboBox = new ComboBox();
        cityComboBox.Location = new System.Drawing.Point(20, 60);
        Controls.Add(cityComboBox);
    }
    private void CountryComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;
        string selectedCountry = (string)comboBox.SelectedItem;
        cityComboBox.Items.Clear();
        if (countryCityMap.ContainsKey(selectedCountry))
        {
            cityComboBox.Items.AddRange(countryCityMap[selectedCountry].ToArray());
        }
    }
}

このコードでは、国を選択すると、その国に対応する都市が別のComboBoxに表示されます。

選択値に応じた動的なUI変更

ComboBoxの選択値に応じて、UIを動的に変更することができます。

例えば、選択された項目に応じて、ラベルの色を変更する例を示します。

using System;
using System.Windows.Forms;
using System.Drawing;
public partial class MyForm : Form
{
    private ComboBox colorComboBox;
    private Label displayLabel;
    public MyForm()
    {
        InitializeComponent();
        colorComboBox = new ComboBox();
        colorComboBox.Items.AddRange(new string[] { "赤", "緑", "青" });
        colorComboBox.Location = new System.Drawing.Point(20, 20);
        colorComboBox.SelectedIndexChanged += ColorComboBox_SelectedIndexChanged;
        Controls.Add(colorComboBox);
        displayLabel = new Label();
        displayLabel.Text = "色を選択してください";
        displayLabel.Location = new System.Drawing.Point(20, 60);
        displayLabel.AutoSize = true;
        Controls.Add(displayLabel);
    }
    private void ColorComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;
        string selectedColor = (string)comboBox.SelectedItem;
        switch (selectedColor)
        {
            case "赤":
                displayLabel.ForeColor = Color.Red;
                break;
            case "緑":
                displayLabel.ForeColor = Color.Green;
                break;
            case "青":
                displayLabel.ForeColor = Color.Blue;
                break;
        }
    }
}

この例では、ComboBoxで選択された色に応じて、ラベルの文字色が変更されます。

データベースからのデータをComboBoxに表示

データベースから取得したデータをComboBoxに表示することも可能です。

以下は、データベースからデータを取得してComboBoxに表示する例です。

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
public partial class MyForm : Form
{
    private ComboBox productComboBox;
    public MyForm()
    {
        InitializeComponent();
        productComboBox = new ComboBox();
        productComboBox.Location = new System.Drawing.Point(20, 20);
        Controls.Add(productComboBox);
        LoadDataFromDatabase();
    }
    private void LoadDataFromDatabase()
    {
        string connectionString = "your_connection_string_here";
        string query = "SELECT ProductName FROM Products";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                productComboBox.Items.Add(reader["ProductName"].ToString());
            }
        }
    }
}

このコードでは、SQL Serverデータベースから製品名を取得し、ComboBoxに表示しています。

データベース接続文字列は適切に設定してください。

よくある質問

ComboBoxの選択値が取得できないのはなぜ?

ComboBoxの選択値が取得できない場合、いくつかの原因が考えられます。

  • イベントハンドラが設定されていない: SelectedIndexChangedイベントや他の適切なイベントにハンドラが設定されているか確認してください。
  • データバインディングの設定ミス: DisplayMemberValueMemberが正しく設定されているか確認してください。

これらが設定されていないと、SelectedValueが期待通りに動作しないことがあります。

  • インデックスが-1: ComboBoxのSelectedIndexが-1の場合、何も選択されていないことを意味します。

初期状態や選択がクリアされた状態では、SelectedIndexが-1になります。

SelectedItemとSelectedValueの違いは?

SelectedItemSelectedValueは、ComboBoxで選択された項目を取得するためのプロパティですが、用途が異なります。

  • SelectedItem: ComboBoxで選択されている項目そのものを返します。

データバインディングされていない場合や、単純なリストの場合に使用します。

例:string selectedItem = (string)comboBox.SelectedItem;

  • SelectedValue: データバインディングされている場合に、ValueMemberで指定された値を返します。

データソースから特定の値を取得したい場合に使用します。

例:int selectedValue = (int)comboBox.SelectedValue;

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

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

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

例:comboBox.SelectedIndex = -1;

この操作により、ComboBoxの表示がクリアされ、SelectedItemSelectedValuenullまたはデフォルト値にリセットされます。

まとめ

この記事では、C#のWindowsフォームアプリケーションにおけるComboBoxの基本的な使い方から応用例までを詳しく解説しました。

ComboBoxの選択値を取得する方法やデータバインディングの設定、さらには複数のComboBoxを連動させる方法など、実践的な内容を含めて説明しました。

これらの知識を活用して、よりインタラクティブでユーザーフレンドリーなアプリケーションを開発してみてはいかがでしょうか。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

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