[C#] ComboBoxの使い方と基本操作
C#のComboBoxは、Windowsフォームアプリケーションで使用されるドロップダウンリストを提供するコントロールです。
基本的な使い方として、まずフォームにComboBoxを配置し、Items
プロパティを使用してリストに表示する項目を追加します。
例えば、comboBox1.Items.Add("Item1");
のように記述します。
選択された項目を取得するには、SelectedItem
プロパティを使用します。
イベントハンドラを追加して、選択が変更されたときに特定の処理を実行することも可能です。
例えば、SelectedIndexChanged
イベントを利用して、選択された項目に応じた処理を実装します。
データバインディングを使用して、データソースから直接項目を読み込むこともできます。
ComboBoxの基本
ComboBoxは、Windowsフォームアプリケーションでよく使用されるコントロールの一つで、ユーザーに選択肢を提供するためのドロップダウンリストを表示します。
ComboBoxは、ユーザーがリストから項目を選択するか、または直接テキストを入力することができるため、柔軟な入力方法を提供します。
C#のWindowsフォームでComboBoxを使用することで、ユーザーインターフェースをより直感的で使いやすくすることができます。
ComboBoxは、データのバインディングやイベント処理を通じて、動的に項目を追加したり、選択された項目に応じてアクションを実行したりすることが可能です。
この記事では、ComboBoxの基本的な使い方や操作方法について詳しく解説します。
ComboBoxの基本操作
ComboBoxの配置
ComboBoxをWindowsフォームに配置するには、Visual Studioのデザイナを使用するのが一般的です。
ツールボックスからComboBoxをフォーム上にドラッグアンドドロップすることで、簡単に配置できます。

配置後、プロパティウィンドウで位置やサイズ、その他のプロパティを調整することができます。
項目の追加と削除
ComboBoxに項目を追加するには、Items
プロパティを使用します。
以下のサンプルコードでは、ComboBoxに項目を追加および削除する方法を示します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// ComboBoxに項目を追加
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// ComboBoxから項目を削除
comboBox1.Items.Remove("バナナ");
}
}

このコードを実行すると、ComboBoxには「りんご」と「オレンジ」が表示され、「バナナ」は削除されます。
選択された項目の取得
ComboBoxで選択された項目を取得するには、SelectedItem
プロパティを使用します。
以下のサンプルコードでは、選択された項目を取得して表示する方法を示します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// ComboBoxの選択が変更されたときに呼び出されるイベントハンドラ
comboBox1.SelectedIndexChanged += (sender, e) =>
{
// 選択された項目を取得
string selectedItem = comboBox1.SelectedItem.ToString();
MessageBox.Show("選択された項目: " + selectedItem);
};
}
}

このコードを実行し、ComboBoxで項目を選択すると、選択された項目がメッセージボックスに表示されます。
イベントの利用
ComboBoxには、ユーザーの操作に応じて様々なイベントが発生します。
最も一般的なイベントはSelectedIndexChanged
で、ユーザーが新しい項目を選択したときに発生します。
以下のサンプルコードでは、SelectedIndexChanged
イベントを利用して、選択された項目を表示する方法を示します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// SelectedIndexChangedイベントの利用
comboBox1.SelectedIndexChanged += ComboBox1_SelectedIndexChanged;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// 選択された項目を取得
string selectedItem = comboBox1.SelectedItem.ToString();
MessageBox.Show("選択された項目: " + selectedItem);
}
}
このコードを実行すると、ComboBoxで項目を選択するたびに、選択された項目がメッセージボックスに表示されます。
イベントを利用することで、ユーザーの操作に応じた動的な処理を実装することができます。
ComboBoxのプロパティ
ComboBoxには、ユーザーインターフェースの動作や外観を制御するための様々なプロパティがあります。
ここでは、特に重要なプロパティについて解説します。
Itemsプロパティ
Items
プロパティは、ComboBoxに表示される項目のコレクションを管理します。
このプロパティを使用して、項目を追加、削除、またはクリアすることができます。
以下のサンプルコードは、Items
プロパティを使用して項目を操作する方法を示しています。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// 項目の追加
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// 項目の削除
comboBox1.Items.Remove("バナナ");
// 全項目のクリア
comboBox1.Items.Clear();
}
}
このコードでは、ComboBoxに項目を追加し、特定の項目を削除し、最後に全ての項目をクリアしています。
SelectedItemプロパティ
SelectedItem
プロパティは、現在選択されている項目を取得または設定します。
このプロパティを使用することで、プログラムから選択状態を変更したり、ユーザーの選択を取得したりすることができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// プログラムから選択項目を設定
comboBox1.SelectedItem = "オレンジ";
// 選択された項目を取得
string selectedItem = comboBox1.SelectedItem.ToString();
MessageBox.Show("選択された項目: " + selectedItem);
}
}
このコードでは、プログラムから「オレンジ」を選択し、その選択された項目をメッセージボックスに表示します。
Textプロパティ
Text
プロパティは、ComboBoxに表示されるテキストを取得または設定します。
ユーザーが直接入力したテキストや、選択された項目のテキストを操作する際に使用します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// テキストを設定
comboBox1.Text = "りんご";
// テキストを取得
string text = comboBox1.Text;
MessageBox.Show("表示されているテキスト: " + text);
}
}

このコードでは、ComboBoxに「りんご」というテキストを設定し、そのテキストをメッセージボックスに表示します。
DropDownStyleプロパティ
DropDownStyle
プロパティは、ComboBoxの表示スタイルを制御します。
このプロパティには、以下の3つのスタイルがあります。
スタイル名 | 説明 |
---|---|
DropDown | ユーザーがリストから選択するか、テキストを入力できるスタイル。 |
DropDownList | ユーザーがリストからのみ選択でき、テキストを入力できないスタイル。 |
Simple | リストが常に表示され、ユーザーがテキストを入力できるスタイル。 |
以下のサンプルコードは、DropDownStyle
プロパティを設定する方法を示しています。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// DropDownStyleを設定
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
}
}

このコードでは、ComboBoxのスタイルをDropDownList
に設定し、ユーザーがリストからのみ選択できるようにしています。
ComboBoxのイベント
ComboBoxは、ユーザーの操作に応じて様々なイベントを発生させます。
これらのイベントを利用することで、ユーザーインターフェースの動作をカスタマイズすることができます。
ここでは、代表的なイベントについて解説します。
SelectedIndexChangedイベント
SelectedIndexChanged
イベントは、ユーザーがComboBoxの選択を変更したときに発生します。
このイベントを利用することで、選択された項目に応じた処理を実行することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// SelectedIndexChangedイベントのハンドラを追加
comboBox1.SelectedIndexChanged += ComboBox1_SelectedIndexChanged;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// 選択された項目を取得
string selectedItem = comboBox1.SelectedItem.ToString();
MessageBox.Show("選択された項目: " + selectedItem);
}
}
このコードでは、ユーザーがComboBoxで項目を選択するたびに、選択された項目がメッセージボックスに表示されます。
DropDownイベント
DropDown
イベントは、ComboBoxのドロップダウンリストが表示される直前に発生します。
このイベントを利用することで、リストが表示される前に項目を動的に変更するなどの処理を行うことができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
// DropDownイベントのハンドラを追加
comboBox1.DropDown += ComboBox1_DropDown;
}
private void ComboBox1_DropDown(object sender, EventArgs e)
{
// ドロップダウンが表示される直前に項目を追加
if (!comboBox1.Items.Contains("オレンジ"))
{
comboBox1.Items.Add("オレンジ");
}
}
}
このコードでは、ドロップダウンが表示される直前に「オレンジ」が項目に追加されます。
DropDownClosedイベント
DropDownClosed
イベントは、ComboBoxのドロップダウンリストが閉じられた直後に発生します。
このイベントを利用することで、リストが閉じられた後の処理を実行することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// DropDownClosedイベントのハンドラを追加
comboBox1.DropDownClosed += ComboBox1_DropDownClosed;
}
private void ComboBox1_DropDownClosed(object sender, EventArgs e)
{
// ドロップダウンが閉じられた後の処理
MessageBox.Show("ドロップダウンが閉じられました");
}
}
このコードでは、ドロップダウンが閉じられた直後にメッセージボックスが表示されます。
これにより、ユーザーがリストを閉じた後のアクションを実装することができます。
ComboBoxのデータバインディング
ComboBoxは、データバインディングを利用することで、外部のデータソースから項目を動的に取得し、表示することができます。
データバインディングを使用することで、データの管理が容易になり、コードの保守性が向上します。
データバインディングの基本
データバインディングとは、UIコントロールとデータソースをリンクさせる仕組みです。
ComboBoxにおいては、データソースから取得したデータをリストとして表示することができます。
データバインディングを行うには、DataSource
プロパティを設定します。
データソースの設定
ComboBoxのDataSource
プロパティを使用して、データソースを設定します。
データソースには、配列、リスト、データテーブルなどを使用することができます。
以下のサンプルコードでは、リストをデータソースとして設定しています。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// データソースとして使用するリストを作成
List<string> fruits = new List<string> { "りんご", "バナナ", "オレンジ" };
// ComboBoxにデータソースを設定
comboBox1.DataSource = fruits;
}
}
このコードでは、fruits
というリストをデータソースとしてComboBoxに設定し、リストの内容がComboBoxに表示されます。
DisplayMemberとValueMemberの設定
データバインディングを行う際、表示する項目とその値を別々に管理したい場合があります。
DisplayMember
プロパティとValueMember
プロパティを使用することで、表示するテキストと実際の値を分けて設定することができます。
以下のサンプルコードでは、カスタムクラスをデータソースとして使用し、DisplayMember
とValueMember
を設定しています。
public class Fruit
{
public string Name { get; set; } // 表示する名前
public int Id { get; set; } // 実際の値
}
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// データソースとして使用するリストを作成
List<Fruit> fruits = new List<Fruit>
{
new Fruit { Name = "りんご", Id = 1 },
new Fruit { Name = "バナナ", Id = 2 },
new Fruit { Name = "オレンジ", Id = 3 }
};
// ComboBoxにデータソースを設定
comboBox1.DataSource = fruits;
comboBox1.DisplayMember = "Name"; // 表示するプロパティを設定
comboBox1.ValueMember = "Id"; // 実際の値のプロパティを設定
}
}
このコードでは、Fruitクラス
のName
プロパティを表示し、Id
プロパティを実際の値として使用しています。
これにより、ユーザーには名前が表示され、プログラム内部ではIDを使用して処理を行うことができます。
ComboBoxのカスタマイズ
ComboBoxは、デフォルトの外観や動作をカスタマイズすることで、アプリケーションのデザインやユーザーエクスペリエンスを向上させることができます。
ここでは、ComboBoxの外観や描画、スタイルのカスタマイズ方法について解説します。
外観のカスタマイズ
ComboBoxの外観をカスタマイズするには、プロパティを調整することで簡単に行えます。
例えば、フォントや色、サイズを変更することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// フォントの変更
comboBox1.Font = new Font("Arial", 12, FontStyle.Bold);
// 背景色の変更
comboBox1.BackColor = Color.LightBlue;
// テキスト色の変更
comboBox1.ForeColor = Color.DarkBlue;
}
}
このコードでは、ComboBoxのフォントをArialの太字に変更し、背景色をライトブルー、テキスト色をダークブルーに設定しています。
カスタム描画
ComboBoxの項目をカスタム描画することで、より柔軟なデザインを実現できます。
DrawMode
プロパティをOwnerDrawFixed
またはOwnerDrawVariable
に設定し、DrawItem
イベントをハンドルすることでカスタム描画を行います。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// カスタム描画を有効にする
comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
comboBox1.DrawItem += ComboBox1_DrawItem;
}
private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// 項目が描画されるときの処理
e.DrawBackground();
Graphics g = e.Graphics;
// 項目のテキストを取得
string text = comboBox1.Items[e.Index].ToString();
// カスタム描画
g.DrawString(text, e.Font, Brushes.Red, e.Bounds);
e.DrawFocusRectangle();
}
}
このコードでは、ComboBoxの項目を赤色で描画しています。

DrawItem
イベントを利用することで、項目ごとに異なる描画を行うことも可能です。
コンボボックスのスタイル変更
ComboBoxのスタイルを変更することで、ユーザーの入力方法を制御できます。
DropDownStyle
プロパティを使用して、スタイルを変更します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// DropDownStyleを設定
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
}
}
このコードでは、ComboBoxのスタイルをDropDownList
に設定し、ユーザーがリストからのみ選択できるようにしています。
スタイルを変更することで、ユーザーの入力方法を制限したり、自由に入力させたりすることができます。
ComboBoxの応用例
ComboBoxは、基本的な使用法に加えて、さまざまな応用機能を実装することができます。
ここでは、フィルタリング機能、自動補完機能、複数選択の実現について解説します。
フィルタリング機能の実装
フィルタリング機能を実装することで、ユーザーが入力したテキストに基づいて、表示される項目を動的に絞り込むことができます。
以下のサンプルコードでは、テキストボックスの入力に応じてComboBoxの項目をフィルタリングしています。
public partial class MyForm : Form
{
private List<string> allItems;
public MyForm()
{
InitializeComponent();
// 全ての項目をリストに保存
allItems = new List<string> { "りんご", "バナナ", "オレンジ", "ぶどう", "メロン" };
// 初期項目を設定
comboBox1.Items.AddRange(allItems.ToArray());
// テキストボックスの入力に応じてフィルタリング
textBox1.TextChanged += TextBox1_TextChanged;
}
private void TextBox1_TextChanged(object sender, EventArgs e)
{
// フィルタリング処理
string filter = textBox1.Text.ToLower();
comboBox1.Items.Clear();
comboBox1.Items.AddRange(allItems.Where(item => item.ToLower().Contains(filter)).ToArray());
}
}
このコードでは、テキストボックスに入力された文字列に基づいて、ComboBoxの項目が動的にフィルタリングされます。
自動補完機能の追加
自動補完機能を追加することで、ユーザーが入力した文字列に基づいて、候補を自動的に表示することができます。
AutoCompleteMode
とAutoCompleteSource
プロパティを設定することで実現できます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
comboBox1.Items.Add("りんご");
comboBox1.Items.Add("バナナ");
comboBox1.Items.Add("オレンジ");
// 自動補完機能を設定
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
}
}
このコードでは、ユーザーがComboBoxに文字を入力すると、入力に基づいた候補が自動的に表示され、選択することができます。
複数選択の実現
標準のComboBoxでは複数選択はサポートされていませんが、ListBoxを使用することで実現可能です。
以下のサンプルコードでは、ListBoxを使用して複数選択を実現しています。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// ListBoxを使用して複数選択を実現
listBox1.SelectionMode = SelectionMode.MultiSimple;
listBox1.Items.Add("りんご");
listBox1.Items.Add("バナナ");
listBox1.Items.Add("オレンジ");
listBox1.Items.Add("ぶどう");
listBox1.Items.Add("メロン");
}
}
このコードでは、ListBoxを使用して複数の項目を選択できるようにしています。
ComboBoxではなくListBoxを使用することで、複数選択のニーズに対応することができます。
まとめ
この記事では、C#のWindowsフォームにおけるComboBoxの基本的な使い方から、プロパティやイベントの活用方法、さらには応用的な機能の実装方法までを詳しく解説しました。
ComboBoxは、ユーザーインターフェースにおいて選択肢を提供するための重要なコントロールであり、その柔軟性と機能性を活かすことで、より直感的で使いやすいアプリケーションを構築することが可能です。
この記事を参考に、実際のプロジェクトでComboBoxを活用し、ユーザーエクスペリエンスの向上に役立ててください。