サブフォームを使った明細行を連続して入力する

お世話になります。環境は4D v15.3 Windows版です。

伝票のような 1:N 関係にあるデータの入力フォームで、明細行を入力にあわせて連続して追加するにはどのようにすればよいでしょうか。

サンプルをzipであげてみました。
http://forums.4d.fr/4DBB_Main/x_User/18835407/files/18880189.zip

ユーザーは素早くキーボードで入力したいためにサブフォームの行の追加ボタンを押したりせず、tabキーで明細行のフィールドを移動させて、一行分の明細行の入力が終わったら自動的に次の明細行にカーソルが合って入力を続けたいという要望があります。

自分で試した方法は次のような感じです。
入力フォームのフィールド間は常にtabキーで移動します。

・最初から1行の明細行を作っておく(伝票を作る以上明細行は必ずあるので)
これでサンプルの顧客名からtabキーで明細行の商品名フィールドに移ります
・明細行の数量フィールドの値が変わった(入力された)ら、CREATE RECORDで次の明細行を作る。一緒にセレクションを保管したりして新しい行が追加されたように見せる
([売上明細]Subform の数量フィールドのメソッド参照)

この方法だと新しい明細行は追加されるのですが、新規明細行が選択状態になるだけで商品名フィールドにカーソルがこないのでマウスクリックなどしないと入力できません。

なんとなく定番の方法がありそうな気がするのですが探せずに困っています。
どうぞよろしくお願いします。

(あと、上の方法だと空の明細行がどうしても出来てしまうも悩みです)

リストボックスで登録に十分な行数の配列を表示しておいて登録完了したらレコードに保存、、ではいかがでしょうか。
入力を取り消したい場合の処置も楽かと思います。

ありがとうございます。

リストボックスをグリッドのように扱えるということなのでしょうか。
試しに、フォームにリストボックスを置き、列追加で4列のリストボックスを作ってみました。
[商品名|単価|数量|金額]
という感じに。
リストボックスの変数名をatMeisaiとし、フォームのOn Load イベントで中身を詰めたら表示されるのかと

Case of
: (Form event=On Load)
ARRAY TEXT(atMeisai;99;4) //99行 4列
atMeisai{1}{1}:=“トースター”
atMeisai{1}{2}:=“1280”
atMeisai{1}{3}:=“2”
atMeisai{1}{4}:=“2560”
End Case

試したのですが、何も表示されませんでした。
空のセルをクリックしても入力できないようで、フォーム上のリストボックスと配列のatMeisaiが結びついていない感じです。
マニュアルの「配列とフォームオブジェクト」の項を見ると
http://doc.4d.com/4Dv15/4D/15.3/Arrays-and-Form-Objects.300-3152651.ja.html

Notes:
2次元配列やポインタ配列は表示できません。
とあって分からなくなってしまいました。

2次元配列は利用できないようなので、カラムに配列と同じ変数名を設定して

ARRAY TEXT(aName;99) //99行
ARRAY LONGINT(aTanka;99)
ARRAY LONGINT(aSuu;99)
ARRAY LONGINT(aKingaku;99)
Case of
: (Form event=On Load)
aName{1}:=“トースター”
aTanka{1}:=“1280”
aSuu{1}:=“2”
atKingaku{1}:=“2560”
End Case

と、することでフォームのリストボックス一行目に反映されました。
なんとなくこれでいいのか感が残るのですが、動作しているようなので進めてみます。

あとは、リストボックスにフォーカスが移動したときに1行目1列目を編集状態にしたいのですが、
リストボックスのオブジェクトメソッドに
Case of
: (Form event=On Getting Focus)
EDIT ITEM(aName;1)
End case
とすると、1行目1列目が編集状態にはなるのですが、TABキーで移動ができなくなってしまいました。
フォーカスが当たると編集状態になり、かつTABで列を移動するようにしたいのですが
どんな方法があるでしょうか

: Katuya OKAMOTO

Case of
: (Form event=On Getting Focus)
EDIT ITEM(aName;1)
End case
とすると、1行目1列目が編集状態にはなるのですが、TABキーで移動ができなくなってしまいました。
フォーカスが当たると編集状態になり、かつTABで列を移動するようにしたいのですが
どんな方法があるでしょうか

On Getting Focusイベントは,リストボックスにフォーカスが移動したときに発生し,EDIT ITEM(または通常の操作)でセルにフォーカスが移動したときにも発生します。

2度目のOn Getting Focusイベントを除外するために,下記のようなコードを記述してみてください。

<code 4D>
If (Form event=On Getting Focus)

If (Focus object=Self)

EDIT ITEM(aName;1)

End if

End if

</code 4D>

参考:

http://doc.4d.com/4Dv16/4D/16/Focus-object.301-3036840.ja.htmlFocus object >

http://doc.4d.com/4Dv16/4D/16/Self.301-3037030.ja.htmlSelf>

注記: SelfとObject get pointerは同一のコマンドです。