[C#] ComboBoxの使い方と基本操作

C#のComboBoxは、Windowsフォームアプリケーションで使用されるドロップダウンリストを提供するコントロールです。

基本的な使い方として、まずフォームにComboBoxを配置し、Itemsプロパティを使用してリストに表示する項目を追加します。

例えば、comboBox1.Items.Add("Item1");のように記述します。

選択された項目を取得するには、SelectedItemプロパティを使用します。

イベントハンドラを追加して、選択が変更されたときに特定の処理を実行することも可能です。

例えば、SelectedIndexChangedイベントを利用して、選択された項目に応じた処理を実装します。

データバインディングを使用して、データソースから直接項目を読み込むこともできます。

この記事でわかること
  • ComboBoxの基本的な配置方法や項目の追加・削除方法
  • ComboBoxのプロパティやイベントを利用した操作方法
  • データバインディングを用いた動的なデータ表示の実現方法
  • ComboBoxの外観や動作をカスタマイズする方法
  • フィルタリングや自動補完機能の実装による応用例

目次から探す

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プロパティを使用することで、表示するテキストと実際の値を分けて設定することができます。

以下のサンプルコードでは、カスタムクラスをデータソースとして使用し、DisplayMemberValueMemberを設定しています。

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の項目が動的にフィルタリングされます。

自動補完機能の追加

自動補完機能を追加することで、ユーザーが入力した文字列に基づいて、候補を自動的に表示することができます。

AutoCompleteModeAutoCompleteSourceプロパティを設定することで実現できます。

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を使用することで、複数選択のニーズに対応することができます。

よくある質問

ComboBoxに大量のデータを追加すると遅くなるのはなぜ?

ComboBoxに大量のデータを追加すると、パフォーマンスが低下することがあります。

これは、ComboBoxがすべての項目をメモリに保持し、描画するために時間がかかるからです。

特に、項目数が多い場合、描画やイベント処理に時間がかかり、ユーザーインターフェースの応答性が低下します。

対策として、データをページングして表示する、または仮想化技術を使用して表示する項目を制限する方法があります。

ComboBoxの選択項目をプログラムで変更するには?

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

例:comboBox1.SelectedItem = "りんご";またはcomboBox1.SelectedIndex = 0;のように記述することで、指定した項目を選択状態にすることができます。

SelectedItemは項目の値を直接指定し、SelectedIndexは項目のインデックスを指定します。

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

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

例:comboBox1.SelectedIndex = -1;とすることで、選択状態を解除し、何も選択されていない状態に戻すことができます。

これにより、ユーザーが選択した項目をクリアし、初期状態に戻すことが可能です。

まとめ

この記事では、C#のWindowsフォームにおけるComboBoxの基本的な使い方から、プロパティやイベントの活用方法、さらには応用的な機能の実装方法までを詳しく解説しました。

ComboBoxは、ユーザーインターフェースにおいて選択肢を提供するための重要なコントロールであり、その柔軟性と機能性を活かすことで、より直感的で使いやすいアプリケーションを構築することが可能です。

この記事を参考に、実際のプロジェクトでComboBoxを活用し、ユーザーエクスペリエンスの向上に役立ててください。

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

関連カテゴリーから探す

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