ComboBox

プロパティ

プロパティ 内容 既定
string Text コントロールに関連付けられているテキスト  
ObjectCollection Items このコンボボックスに含まれる、項目のコレクション  
object DataSource データソース。IListまたはArrayを実装するオブジェクト null
string DisplayMember    
string FormatString    
bool FormattingEnabled trueならば、DisplayMemberに書式設定が適用される false (デザイナーで追加するとtrue)
ComboBoxStyle DropDownStyle コンボボックスのスタイル DropDown
bool IntegralHeight trueならば、項目数に応じて高さが拡大される。ただし一定数以上には拡大されない true
int MaxDropDownItems ドロップダウンに表示される項目の最大数。ただしIntegralHeightがtrueならば無視される 8
int DropDownHeight ドロップダウン部分のピクセル単位での高さ。これを設定するとIntegralHeightがfalseとなる

DropDownStyleがSimpleのときは無視され、 Heightプロパティの高さとなる

 
int DropDownWidth ドロップダウン部分のピクセル単位での幅  
object SelectedItem 選択されている項目。選択されている項目がないならばnull  
int SelectedIndex 選択されている項目のインデックス。選択されている項目がないならば-1  
string SelectedText 編集できるテキストの中で、選択されているテキストを表す文字列  
AutoCompleteMode AutoCompleteMode オートコンプリートの方法。機能はTextBoxのそれと同等  
DrawMode DrawMode 要素の描画方法 Normal
       
プロパティ - ComboBox クラス (System.Windows.Forms) | Microsoft Learn

Text

set

  • nullまたは空文字列を設定すると、SelectedIndexは-1となる
  • Itemsに含まれる文字列を設定すると、SelectedIndexはその項目のインデックスとなる
  • Itemsに含まれない文字列を設定すると、SelectedIndexは変化しない
Remarks - ComboBox.Text Property (System.Windows.Forms) | Microsoft Learn

指定した文字列はItemsの項目と大文字/小文字の区別なく比較され、それに一致する項目があるとSelectedIndexの値が変化し、Textの内容はその項目の文字列に置き換えられます。たとえば"a"と指定したときにItemsに"A"が含まれていると、Textは"A"に設定されます。Text - ComboBox.cs

一方でユーザーがテキストを入力した場合、AutoCompleteModeがAppendでAutoCompleteSourceがListItemsならば、Itemsに一致する項目があるときにTextの文字列が置き換えられますが、ユーザーはその提案を無視して上書きすることができます。

get

SelectedItemがnullでなければ、その文字列が返されます。Remarks - ComboBox.Text Property (System.Windows.Forms) | Microsoft Learn

Items

一般的にこのプロパティはテキストを表示するために使用されますが、任意のオブジェクトを追加できます。そのときはそのオブジェクトのToString()が返すテキストが表示されます。Remarks - ComboBox.Items Property (System.Windows.Forms) | Microsoft Learn

なおListBoxのItemsプロパティの型も同名のObjectCollectionクラスですが、そちらはListBox.ObjectCollectionであり、こちらのComboBox.ObjectCollectionとは異なります。

表示内容の変更

オブジェクトのToString()以外の内容で表示したいとき、それがそのオブジェクトのプロパティならば、項目をDataSourceで指定し、プロパティをDisplayMemberで指定します。たとえば、

comboBox.Items.AddRange(new[]
{
    CultureInfo.CreateSpecificCulture("ja-JP"),
    CultureInfo.CreateSpecificCulture("en-US")
});
// "ja-JP", "en-US" が表示される

をDataSourceとDisplayMemberで指定するには、次のようにします。

comboBox.DataSource = new[]
{
    CultureInfo.CreateSpecificCulture("ja-JP"),
    CultureInfo.CreateSpecificCulture("en-US")
};

comboBox.DisplayMember = "DisplayName";
// "日本語 (日本)", "英語 (米国)" が表示される

プロパティ以外を対象とするなど、より柔軟に表示するにはDrawItemイベントでオーナー描画します。

DropDownStyle

  一覧 テキストの編集
Simple つねに表示される 可能 ※1
DropDown 矢印をクリックすると表示される 可能
DropDownList 不可
ComboBoxStyle 列挙型 (System.Windows.Forms) | Microsoft Learn

※1 一覧がつねに表示される状態でテキストの編集を不可としたいならば、ListBoxを用います。

Simpleを指定したときには、Heightプロパティで一覧が表示されるだけの高さを指定します。さもなくば一覧は可視となりません。

SelectedItem

設定するとき、指定のオブジェクトが存在しないと無視されます。Remarks - ComboBox.SelectedItem Property (System.Windows.Forms) | Microsoft Learn

SelectedText

テキストの選択は、次のように変化します。

  • フォーカスを得ると、すべてのテキストが選択された状態になる
  • Focus()により入力フォーカスを設定すると、コントロールがフォーカスを得ていないなくても、すべてのテキストが選択された状態になる
  • ユーザがドロップダウンから項目を選択すると、その新しい項目は自動で選択される
  • フォーカスを失うと選択位置はテキストの先頭へ移動し、何も選択されていない状態になる
Remarks - ComboBox.SelectedText Property (System.Windows.Forms) | Microsoft Learn

メソッド

メソッド 機能
FindString(String) 指定の文字列で始まる、最初の項目のインデックスを得られる。大文字/小文字は区別されない
FindStringExact(String) 指定の文字列に一致する、最初の項目のインデックスを得られる。大文字/小文字は区別されない
BeginUpdate() 項目が1つずつ追加されるときに、パフォーマンスを維持する
EndUpdate() BeginUpdate()によって中断された描画を再開する
   

FindStringExact()

public int FindStringExact (string s);
FindStringExact(String) - ComboBox.FindStringExact メソッド (System.Windows.Forms) | Microsoft Learn

一致する項目が見つからない場合は-1が返されます。

WndProc()

テキストが編集可能なときに、それが描画されるときにはWM_CTLCOLOREDIT (0x0133) メッセージが送られます。WM_CTLCOLOREDIT メッセージ (Winuser.h) - Win32 apps | Microsoft Learn

イベント

イベント 発生タイミング
EventHandler TextChanged Textプロパティの値が変更されるとき
EventHandler TextUpdate テキストを書式化し、表示する前。ドロップダウンから選択され、Textプロパティが変更されても発生しない
EventHandler SelectedIndexChanged SelectedIndexプロパティが変更されたとき
EventHandler SelectionChangeCommitted 選択されている項目がユーザーによって変更され、その項目が表示されたとき
DrawItemEventHandler DrawItem DrawModeがNormal以外に設定されているときに、ComboBoxのビジュアルな部分が変更されたとき
     

TextChanged

継承元のTextChangedと同様にTextプロパティの値が変更されるときに発生するイベントですが、ComboBoxでは値が変更されていなくても発生する場合があります。

  • SelectedIndexを設定すると無条件にOnTextChanged()が呼ばれるため、そのインデックスの項目が同一の値であっても発生する SelectedIndex - ComboBox.cs
  • Textに設定した文字列がItemsに含まれるとSelectedIndexが設定されるため、結果としてそのSelectedIndexへの設定で発生する Text - ComboBox.cs

また指定した文字列と大文字/小文字の相違だけの文字列がItemsに含まれる場合、継承元のControl.Textでは値が異なるためにTextChangedが発生し、ComboBox.TextではSelectedIndexが変更されることでTextChangedが発生するため、結果としてTextChangedが2回発生します。

ドロップダウンから選択されたことでTextが変更された場合は、SelectedItemがnullではないことから区別できます。

DrawItem

次の条件を満たすときに、このイベントは発生します。

  • DrawModeがNormal以外である
  • ドロップダウンに表示する内容がある

DropDownStyleがDropDownList以外のときは、テキスト部は描画対象となりません。

Microsoft Learnから検索