[C#][Windows Formsアプリ][ComboBox] DropDownStyleプロパティで入力方法と見た目を決める

スポンサーリンク

はじめに

DropDownStyle は、ComboBox の入力方法と見た目を決める最重要プロパティです。
「ユーザーに自由入力を許すのか」「一覧からのみ選ばせるのか」「常に一覧を表示するのか」をここで制御します。

 

DropDownStyleプロパティとは?

ComboBox.DropDownStyleComboBoxStyle 列挙体(DropDown / DropDownList / Simple)のいずれかを設定します。

見た目 / 入力 主な用途
DropDown テキストボックス + ▼。
ユーザーが自由入力でき、リストからも選べる。
あいまい検索、サジェスト入力、既定値 + ユーザー追記
DropDownList テキスト編集不可(グレー)。
リストから選択のみ
マスタからの固定選択(入力ミスを防ぐ)
Simple テキストボックス + 常時リスト表示(縦に開いた形)。 項目数が少ないプリセット、一覧を見ながらの編集
要点
・自由入力を禁止したい→ DropDownList
・自由入力 + 候補提示したい→ DropDown(AutoCompleteと相性◎)
・常に候補を見せたい→ Simple

 

基本の使い方

コードで設定

// 自由入力 + リスト選択(既定)
comboBox1.DropDownStyle = ComboBoxStyle.DropDown;

// 固定選択(自由入力禁止)
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

// 常時リスト表示
comboBox1.DropDownStyle = ComboBoxStyle.Simple;

デザイナーで設定

  1. ComboBox を選択
  2. プロパティウィンドウ → DropDownStyle を目的の値に変更

 

AutoCompleteとの連携(DropDown時の鉄板設定)

DropDown では、ユーザーのタイプに合わせて候補を自動補完できます。

comboBox1.DropDownStyle      = ComboBoxStyle.DropDown;
comboBox1.AutoCompleteMode   = AutoCompleteMode.SuggestAppend; // 候補表示 + 補完
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;   // Itemsから候補

DropDownList でも AutoComplete は機能します(テキスト編集は不可だが、候補選択はできる)。

 

実用例

A) 固定選択にしたい(入力ミスを防ぐ)

comboBox1.Items.AddRange(new[] { "未着手", "進行中", "保留", "完了" });
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; // 自由入力禁止

B) サジェスト入力(曖昧検索っぽく)

comboBox1.Items.AddRange(new[] { "Tokyo", "Osaka", "Nagoya", "Fukuoka" });
comboBox1.DropDownStyle      = ComboBoxStyle.DropDown;
comboBox1.AutoCompleteMode   = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

C) 常時リスト表示で即時選択

comboBox1.DropDownStyle = ComboBoxStyle.Simple; // リストが常に表示される
comboBox1.Height = 150; // リストの高さはコントロールの高さに依存
comboBox1.Items.AddRange(new[] { "Low", "Middle", "High" });

 

関連プロパティとの関係

  • MaxDropDownItems … ドロップダウン時に同時表示する最大行数(Simple には非適用)。
  • IntegralHeight … アイテムを行単位で切らずに表示(false でピクセル合わせ優先)。
  • DropDownWidth … ドロップダウンの幅(文字が切れるときに拡げる)。
  • Sorted … 追加後に自動昇順ソート(ローカライズ環境では並び順に注意)。

 

キーボード操作の挙動

  • Alt + … ドロップダウンを開く(Simple は常時表示のため対象外)。
  • 文字キー … DropDown はテキストへ入力、DropDownList は一致項目へジャンプ。
  • Enter … 現在選択を確定(DropDown ではテキスト確定にも)。

 

よくある落とし穴と対策

  • 自由入力を禁止したいのに入力できる
    DropDownStyle = DropDownList にする(DropDown のままでは禁止不可)。
  • リストが常時表示されない
    Simple を使う。高さはコントロールの Height で調整。
  • 長い文字が切れる
    DropDownWidth を広げる、または項目テキストを省略表示にする。
  • AutoCompleteが効かない
    AutoCompleteSource = ListItemsAutoCompleteMode の組合せを確認。

 

サンプル:スタイル切り替えUI

using System;
using System.Windows.Forms;

namespace ComboBoxDropDownStyleSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            comboBox1.Items.AddRange(new[] { "Apple", "Banana", "Cherry", "Durian" });
            comboBox1.DropDownStyle = ComboBoxStyle.DropDown;

            radioDropDown.CheckedChanged    += (_, __) => ApplyStyle();
            radioDropDownList.CheckedChanged += (_, __) => ApplyStyle();
            radioSimple.CheckedChanged       += (_, __) => ApplyStyle();
        }

        private void ApplyStyle()
        {
            if (radioDropDown.Checked)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
                comboBox1.AutoCompleteMode   = AutoCompleteMode.SuggestAppend;
                comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
            }
            else if (radioDropDownList.Checked)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
                comboBox1.AutoCompleteMode   = AutoCompleteMode.SuggestAppend; // 有効
                comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
            }
            else if (radioSimple.Checked)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.Simple;
                comboBox1.Height = 160; // リストが見えるように
            }
        }
    }
}

 

まとめ

  • DropDownStyle は「入力可否・見た目」を決める中核プロパティ。
  • DropDown=自由入力可、DropDownList=選択のみ、Simple=常時表示。
  • AutoComplete を組み合わせると検索性が大幅に向上。
  • 表示幅・行数・ソートなど周辺プロパティで体験を最適化。
Please follow and like us:

コメント

タイトルとURLをコピーしました