ListBox コントロールを使用すると、ユーザーがクリックして選択できる項目のリストを表示できます。SelectionMode プロパティを使用すると、ListBox コントロールを単一選択または複数選択のリスト ボックスにすることができます。ListBox には、項目を縦に並べたリストを表示するのではなく、複数の列に項目を表示できるようにする MultiColumn プロパティも用意されています。これにより、コントロールにより多くの項目を表示できるため、項目を表示するためにスクロールする手間を省くことができます。
通常、ListBox に表示される項目を描画するタスクは Windows によって処理されます。DrawMode プロパティを使用し、MeasureItem イベントと DrawItem イベントを処理することで、Windows が提供する自動描画をオーバーライドし、項目を独自に描画できます。オーナー描画 ListBox コントロールを使用すると、高さが可変の項目やイメージを表示したり、リスト内の各項目のテキストに異なる色やフォントを適用したりできます。HorizontalExtent プロパティ、GetItemHeight、および GetItemRectangle も、独自の項目を描画するときに役立ちます。
表示機能および選択機能の他に、ListBox には、ListBox に項目を効率よく追加したり、リストの項目にあるテキストを検索したりできる機能も用意されています。BeginUpdate メソッドおよび EndUpdate メソッドを使用すると、リストに項目を追加するたびにコントロールを再描画せずに ListBox に多数の項目を追加できます。FindString メソッドおよび FindStringExact メソッドを使用すると、特定の検索文字列を含むリスト内の項目を検索できます。
Items、SelectedItems、SelectedIndices の各プロパティを使用すると、ListBox によって使用される 3 つのコレクションにアクセスできます。ListBox によって使用される 3 つのコレクションとコントロール内でのそれらの使用方法について次の表で説明します。
ListBox クラスでサポートされる 3 つのインデックス付きコレクションを次の 3 つの例で示します。
ListBox の項目がどのように ListBox.ObjectCollection に格納されるかを示す例と、その ListBox 内での各項目の選択状態を次の表に示します。
| インデックス | 項目 | ListBox 内の選択状態 |
| 0 | object1 | 選択されていない |
| 1 | object2 | 選択されている |
| 2 | object3 | 選択されていない |
| 3 | object4 | 選択されている |
| 4 | object5 | 選択されている |
前の表の ListBox.ObjectCollection に基づいた ListBox.SelectedObjectCollection の内容を次の表に示します。
| インデックス | 項目 |
| 0 | object2 |
| 1 | object4 |
| 2 | object5 |
前の表の ListBox.ObjectCollection に基づいた ListBox.SelectedIndexCollection の内容を次の表に示します。
| インデックス | 項目のインデックス |
| 0 | 1 |
| 1 | 3 |
| 2 | 4 |
ListBox.ObjectCollection クラスの Add メソッドを使用すると、項目を ListBox に追加できます。Add メソッドは、ListBox にメンバを追加するときに、任意のオブジェクトを受け入れます。オブジェクトが ListBox に追加されるときに、そのオブジェクト内のメンバの名前が DisplayMember プロパティに指定されていない限り、コントロールはオブジェクトの ToString メソッドで定義されたテキストを使用します。ListBox.ObjectCollection クラスの Add メソッドを使用して項目を追加する他に、ListControl クラスの DataSource プロパティを使用しても項目を追加できます。
メモ |
|---|
| 基本 Windows フォーム上に ListBox、ComboBox、または CheckedListBox が配置されており、派生 Windows フォームでこれらのコントロールの文字列コレクションを変更する場合は、基本 Windows フォームのこれらのコントロールの文字列コレクションを空にする必要があります。これらの文字列コレクションが空でない場合、他の Windows フォームを派生させると、文字列コレクションが読み取り専用になります。 |