[C#] ComboBoxで選択された値を取得する方法
C#でComboBoxから選択された値を取得するには、ComboBoxコントロールのSelectedItem
またはSelectedValue
プロパティを使用します。
SelectedItem
は選択された項目全体を返し、SelectedValue
はValueMember
プロパティで指定された値を返します。
例えば、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
プロパティを使用します。
データソースとしては、DataTable
やList<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の設定
データバインディングを行う際に、表示する項目とその値を指定するために、DisplayMember
と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";
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);
}
}
このコードでは、ComboBox
とLabel
をフォームに追加しています。
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に表示しています。
データベース接続文字列は適切に設定してください。
よくある質問
まとめ
この記事では、C#のWindowsフォームアプリケーションにおけるComboBoxの基本的な使い方から応用例までを詳しく解説しました。
ComboBoxの選択値を取得する方法やデータバインディングの設定、さらには複数のComboBoxを連動させる方法など、実践的な内容を含めて説明しました。
これらの知識を活用して、よりインタラクティブでユーザーフレンドリーなアプリケーションを開発してみてはいかがでしょうか。