リストフォームを定義するには、まず親フォームで使用するサブフォームを作成しなければなりません。リストフォームに関する詳細は一覧フォームとレポートを参照してください。
親フォーム中では、フォームエディターのオブジェクトバーにあるサブフォームツールを使用してサブフォームを作成します
。
注: エクスプローラーのフォームページからドラッグ&ドロップすることもできます。
プロパティリストのサブフォームテーマで、出力サブフォームオプションがチェックされていることを確認し、ソースメニューからソーステーブルを選択したらリストフォームから使用するフォームを選択します。
親フォーム内でサブフォームコンテナをサイズ変更し、位置を調整することができます。

サブフォームへのデータ入力を処理するカスタムボタンを追加できます。標準やハイライト、非表示などどのようなタイプのボタンでも使用できます。プログラムや (データ入力参照) 標準アクションを使用してアクションを設定できます。
4Dはサブレコードを管理する基本的なニーズに応える3つの標準アクション、サブレコード編集、サブレコード削除、サブレコード追加を提供します。 フォームに複数のサブフォームインスタンスが含まれる場合、フォーカスを持つサブフォームにアクションが適用されます。
ボタンの追加や標準アクションの割り当てについてはボタンや標準アクションを参照してください。
リストサブフォーム特有のプロパティを設定できます。このプロパティにより、ユーザーアクションに許可するさまざまな自動機能を制御できます。

通常これらのプロパティはページサブフォームで使用されます。ページサブフォームを参照してください。
このプロパティを使用してサブフォームのソースタイプを指定できます。リストサブフォームの場合、サブフォームが属するテーブルを選択します。
このオプションを使用して、リストサブフォームに詳細フォームを割り当てます。詳細フォームはサブレコードを入力したり表示したりするために使用します。通常詳細フォームにはリストサブフォームより多くの情報が含まれています。詳細フォームはサブフォームと同じテーブルに属していなければなりません。詳細フォームを指定しない場合、4Dは自動でデフォルト入力フォームを使用します。
サブフォームの設定に基づき、ユーザーがサブレコード上でダブルクリックするか、サブレコードを追加/編集するコマンドを追加すると、詳細フォームが表示されます。
注: リストサブフォームに詳細フォームを結び付けるには、エクスプローラーから詳細フォームをサブフォームコンテナに、Shiftキーを押しながらドラッグすることもできます。
他のフォームオブジェクトと同様、サブフォームエリアも自由にサイズ変更できます。
またすべてのフィールドが表示されるよう、自動でサブフォームの幅を決定することもできます。これを行うにはオブジェクトコンテナプロパティで自動幅オプションを選択します。
注: エクスプローラーからフォームにドラッグでサブフォームを追加した場合、4Dは自動で適切な幅をサブフォームに設定します。
リストサブフォームでは3つの選択モードなし、単一、複数があります
- なし
このモードが選択されているとレコードを選択することはできません。リスト更新可オプションが選択されていない限り、リスト中でのクリックは何の効果もありません。ナビゲーションキーはリストをスクロールするだけです。On Selection Changeフォームイベントは生成されません。 - 単一
このモードでは一度に一つのレコードのみを選択できます。レコードをクリックするとそれが選択され、カレントレコードになります。レコード上でCtrl+クリック (Windows) や Command+クリック (Mac OS) 行うと選択されたり、選択が解除されたりします。
上や下矢印キーを押すと、リスト中の前後のレコードが選択されます。選択されるレコードが変わるたびに、On Selection Changeフォームイベントが生成されます。 - 複数
このモードでは同時に複数のレコードを選択できます。選択されたサブレコードはGET HIGHLIGHTED RECORDSで取得できます。レコードをクリックするとそのレコードが選択されますが、カレントレコードは変更されません。レコード上でCtrl+クリック (Windows) または Command+クリック (Mac OS) すると選択または選択解除されます。Ctrl+クリック (Windows) やCommand+クリック (Mac OS) そしてShift+クリックキーにより複数選択できます。上や下矢印キーを押すと、リスト中の前後のレコードが選択されます。選択されるレコードが変わるたびに、On Selection Changeフォームイベントが生成されます。
リストサブフォームにリスト更新可プロパティが設定されていると、ユーザーはリスト中で直接レコードデータを更新できます。これを行うには、更新するフィールド上で2回クリックを行い、編集モードにします (ダブルクリックにならないようクリックの間隔を空けなければなりません)。
デフォルトでこのモードはすべてのリストサブフォームに対し有効です:

このオプションがチェックされていない場合、データ入力は詳細フォームを通して行わなければなりません。
ユーザーのダブルクリック時にリストサブフォームがどのようにふるまうべきか、設定できます。以前の4Dバージョンで作成されたデータベースの場合、空行をダブルクリックした際の動作も設定できます (互換オプション)。
- 行をダブルクリック: サブフォームレコード上でダブルクリックされた際のアクション。以下の選択肢があります:
- なにもしない: ダブルクリックを無視します。
- レコード編集: サブフォームレコード編集モードにします。"リスト更新可"オプションがチェックされている場合、直接リスト中で編集でされます。そうでない場合、サブフォームに割り当てられた詳細フォームを通して編集します。
- レコード表示: サブフォームに割り当てられた詳細フォーム上にレコードを表示します (読み込みのみ)。
- 空行をダブルクリック: サブフォーム中の空行をダブルクリックした場合に実行されるアクション。以下の選択肢があります:
- なにもしない: ダブルクリックを無視します。
- レコード追加: サブフォーム中に新しいレコードを作成し、編集モードにします。"リスト更新可"オプションが選択されている場合レコードは直接リスト中に作成されます。選択されていない場合、レコードはサブフォームに割り当てられた詳細フォーム上に作成されます。
デフォルトでユーザーは、DelやBackspaceを使用してリストサブフォーム中のサブレコードを削除できます。
特定のアプリケーションではこの振る舞いがインターフェースの標準操作を妨げることがあるので、削除を許可オプションを使用してこの動作を無効にできます。
このオプションにチェックが入れられていないと、ユーザーはキーボードの削除キーを使用したサブレコードの削除ができなくなります。
サブフォームインスタンスはフォーカス表示プロパティ ("入力"テーマ) を持つことができます。サブフォームインスタンスがフォーカスを得ると、ユーザーはナビゲーションキーや (複数行選択可の場合) すべてを選択メニューコマンド等を使用してそれを制御できます。
サブフォームがフォーカスを得たり失ったりすると、親フォームでOn getting focusやOn losing focusイベントが生成されます。この場合、OBJECT Get pointerコマンド (またはFocus objectコマンド) はサブフォームのテーブルへのポインターを返します。
すべてのフォーカス可オブジェクトのように、フォーカスの四角を隠すプロパティを使用して、フォーカスの表示を無効にできます。
サブフォームに表示しきれないレコードが存在する可能性があるため、サブフォームレコードの印刷を扱うために、4Dは"印刷"テーマの3つのオプションを提供します:
- 可変 (デフォルト)
このオプションが選択されていると、4Dはすべてのサブレコードを印刷するためにサブフォームエリアを伸縮させます。 - 固定 (切り捨て)
このオプションが選択されていると、4Dはサブフォームエリアに表示されているサブレコードのみを印刷します。フォームは一度のみ印刷され、印刷されないレコードは無視されます。 - 固定 (全レコード)
このオプションが選択されていると、サブフォームエリアのサイズは保持されますが、4Dはすべてのサブレコードが印刷されるまでフォームを複数回印刷します。
注:
- サブフォームオブジェクトコンテナの両側にオブジェクトを配置することはできません。コンテナの両側におかれたオブジェクトはサブフォームの行ごとに繰り返されます。
- 同じフォームページ上に同じテーブルのサブフォームインスタンスを複数配置して印刷することはできません。
- Print object とPrint form コマンドは可変サイズ印刷オプションと併用することはできません。
- 可変フレーム印刷オプションは、OBJECT SET PRINT VARIABLE FRAME コマンドを使用することによってプログラミングによって設定することができます。
- 可変サイズのオブジェクトの印刷については印刷時可変を参照してください。