リストボックスは複合アクティブオブジェクトであり、同期化された列としてデータの表示や入力を行えるエリアです。リストボックスには“グループ化したスクロールエリア”と同じ基本的な機能があり、また新たに拡張された機能も備えています(値入力、列の並び替え、外観のカスタマイズ、 列の移動など)。リストボックスタイプのオブジェクトはすべて4Dのフォームエディターで設定可能であり、またプログラムから処理することもできます。

この章ではフォームエディターでリストボックスタイプのオブジェクトを作成し、設定するための原則について説明します。プログラムでこれらオブジェクトを管理する際の情報については、4Dランゲージリファレンスマニュアルのリストボックスを参照してください。
リストボックスには複数のタイプがあります: セレクション型リストボックス、配列型リストボックス、コレクションまたはエンティティセレクション型リストボックスです。
- セレクション型リストボックス: 行数はカレントセレクションまたは命名セレクションに含まれるレコード数に基づき決定されます。各列にはフィールド (例えば[Employees]LastName) または4D式を割り当てます。式は1つ以上のフィールド (例えば[Employees]FirstName+“ ”[Employees]LastName) または単にフォーミュラ (例えばString(Milliseconds))を使用できます。式にはプロジェクトメソッド、変数、あるいは配列項目を指定できます。
カレントセレクションに基づくリストボックスの場合、データベース側で行われた更新は自動でリストボックスにも反映されます。またその逆も同様です。つまりカレントセレクションの場合、常に両方で同じとなります。 - 配列型リストボックス: 行数は配列の要素数により決定されます。リストボックスのそれぞれの列には4D配列を割り当てます。デフォルトで4Dは各列に“ColumnX”という名 前の配列変数を割り当てます。列のプロパティで配列変数名を変更できます。このタイプのリストボックスでは、入力あるいは表示される値は4Dランゲージで制御します。列に選択リストを割り当てて、データ入力を制御することもできます (リストボックス列特有のプロパティ参照)。
- コレクションまたはエンティティセレクション型リストボックス: 行数はコレクション要素数あるいはエンティティの数により決定されます。カラムプロパティには、それぞれのカラムは通常プロパティパスを参照する4D式が各カラムに割り当てられています([title id="1006"/]参照)。コレクション要素あるいはエンティティは コマンドを使用することで返されます(例えば、を使用すると、各要素/エンティティの"firstName"プロパティ/属性の値を表示します)。
注: コレクションとエンティティセレクションは、リストボックスのデータソースとしてはとても似通っています。しかしながら、エンティティセレクション型リストボックスでは、行が直接データストアのデータとつながっているため、ユーザーデータ入力に関わる追加の機能を利用することができます( 参照)。
フィールドを割り当てた列と配列を割り当てた列を同時にひとつのリストボックスで使用することはできません。
リストボックスには1つ以上の列があり、その内容が自動的に同期化されます。デフォルトでリストボックス作成時は1つの列が含まれています。コンテキストメニュー (任意の列、または列ヘッダをクリック) やリストボックスのプロパティで列数を変更することができます (列の追加、複製、削除)。

理論上、列数に制限はありません(マシン資源に依存します)。
リストボックスはオブジェクト全体、列、列ヘッダー、列フッターという異なる4つの部分から成り立ちます。フォームエディターでは、これらの各部分を別々に選択することもできます。各部分には独自のオブジェクトと変数名、ならびに固有のプロパティがあります。例えば列の数やそれぞれの行の代替カラーは、リストボックスオブジェクトのプロパティで定義します。各列の幅は列のプロパティで指定し、ヘッダのフォントはヘッダーのプロパティで定義します。
注: セレクションタイプのリストボックスでは、列に変数名はありません。
配列タイプのリストボックスは標準モードまたは階層モードで表示できます。階層モードで表示されるリストボックスは以下に説明するような特別なメカニズムを使用します。
実行中、リストボックスはリストとしてデータを表示し、入力を受け付けます。
セルを編集可能にするには (列が入力を受け付けるようにするには)、セル上で2回クリックを行います:

注: 詳細は4Dランゲージリファレンスマニュアルのを参照してください。
ひとつのリストボックスセル内に複数行のテキストを入力し、表示できます。改行を追加するには:
- Windows: Ctrl+Return を押します。
- Mac OS: Command+Return を押します。
行の高さは自動では調整されないことに留意してください。
ヘッダーをクリックすると、列の値をソートできます (標準ソート)。並び替えは文字順で行われ、クリックするごとに昇順と降順が入れ替わります。すべての列が自動で同期されます。
注: 詳細は4Dランゲージリファレンスマニュアルのを参照してください。
またそれぞれの列幅を変更することもできます:

ユーザーはマウスを使用して列や行の順番を(そのアクションが許可されていれば)入れ替えることもできます(ただし行は配列型のみ可能):

最後に、ユーザーは標準のショートカットを使用して1つ以上の行を選択できます。Shift+クリックで連続した行を、Ctrl+クリック (Windows) や Command+クリック (Mac OS) で非連続行を選択できます。
これらすべての特徴は、リストボックス、列、ヘッダー、フッターそれぞれのプロパティを使用して制御できます。この点については後述します。
注: 階層モードのリストボックスの特徴については階層リストボックスで説明します。
リストボックスは"プレビュー"モード (リストボックスがフォームに表示されている状態のピクチャー)、または"詳細"モード (内容に基づき可変サイズ) で印刷できます。詳細は4Dランゲージリファレンスのを参照してください。