型 | プロパティ | 内容 | 既定 |
---|---|---|---|
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 |
指定した文字列はItemsの項目と大文字/小文字の区別なく比較され、それに一致する項目があるとSelectedIndexの値が変化し、Textの内容はその項目の文字列に置き換えられます。たとえば"a"と指定したときにItemsに"A"が含まれていると、Textは"A"に設定されます。Text - ComboBox.cs
一方でユーザーがテキストを入力した場合、AutoCompleteModeがAppendでAutoCompleteSourceがListItemsならば、Itemsに一致する項目があるときにTextの文字列が置き換えられますが、ユーザーはその提案を無視して上書きすることができます。
SelectedItemがnullでなければ、その文字列が返されます。Remarks - ComboBox.Text Property (System.Windows.Forms) | Microsoft Learn
一般的にこのプロパティはテキストを表示するために使用されますが、任意のオブジェクトを追加できます。そのときはそのオブジェクトの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イベントでオーナー描画します。
一覧 | テキストの編集 | |
---|---|---|
Simple | つねに表示される | 可能 ※1 |
DropDown | 矢印をクリックすると表示される | 可能 |
DropDownList | 不可 |
※1 一覧がつねに表示される状態でテキストの編集を不可としたいならば、ListBoxを用います。
Simpleを指定したときには、Heightプロパティで一覧が表示されるだけの高さを指定します。さもなくば一覧は可視となりません。
設定するとき、指定のオブジェクトが存在しないと無視されます。Remarks - ComboBox.SelectedItem Property (System.Windows.Forms) | Microsoft Learn
テキストの選択は、次のように変化します。
メソッド | 機能 |
---|---|
FindString(String) | 指定の文字列で始まる、最初の項目のインデックスを得られる。大文字/小文字は区別されない |
FindStringExact(String) | 指定の文字列に一致する、最初の項目のインデックスを得られる。大文字/小文字は区別されない |
BeginUpdate() | 項目が1つずつ追加されるときに、パフォーマンスを維持する |
EndUpdate() | BeginUpdate()によって中断された描画を再開する |
public int FindStringExact (string s);FindStringExact(String) - ComboBox.FindStringExact メソッド (System.Windows.Forms) | Microsoft Learn
一致する項目が見つからない場合は-1が返されます。
テキストが編集可能なときに、それが描画されるときには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と同様にTextプロパティの値が変更されるときに発生するイベントですが、ComboBoxでは値が変更されていなくても発生する場合があります。
また指定した文字列と大文字/小文字の相違だけの文字列がItemsに含まれる場合、継承元のControl.Textでは値が異なるためにTextChangedが発生し、ComboBox.TextではSelectedIndexが変更されることでTextChangedが発生するため、結果としてTextChangedが2回発生します。
ドロップダウンから選択されたことでTextが変更された場合は、SelectedItemがnullではないことから区別できます。
次の条件を満たすときに、このイベントは発生します。
DropDownStyleがDropDownList以外のときは、テキスト部は描画対象となりません。