過去の桐井戸端BBS (桐ver.9)
29924 伝票形式フォームで次行へカーソルが移動したとき最初のオブジェクトをスキップして移動してしまう 讃岐のご隠居 2005/05/14-19:17
皆様今晩は。
伝票形式フォームで明細部に左から背の低いテキストオブジェクトA、背の高いテキストB、背の低いテキストCと3個並んでいます、
入力時にリターンを押したときにABCBCBCと移動していって2行目以降はAをスキップしてBへ移動してしまいます。
Bの背が高いことが原因ではないかと思われます。
タブオーダーはABCの順番にしているのですが、あと何を設定すればABCABCABCと正しく移動するようになりますか?
29932 Re:次行へのカーソルの移動 佐田 守弘 2005/05/15-06:51
記事番号29924へのコメント
讃岐のご隠居さん

 >ーダーはABCの順番にしているのですが、あと何を設定すればABCABCABCと正し
 >く移動するようになりますか?
Cのオブジェクトの属性で編集のタブを開き、改行方向を「定義順」に設定してみて下さい。
多分、この設定がしてないので、タブオーダー順(定義順)に動かないのだと思います。
おそらく現在は「(継承)」ないしは「次行」に設定されているのだと思います。

またフォームのオブジェクトの属性で編集のタブを開き、同じ様に「定義順」に設定すれば、
全てのテキストオブジェクトで定義順に移動します。
(それぞれのオブジェクトでは「(継承)」に設定)

【補足説明】

●編集時のオブジェクトの移動順序について
上記のデフォルトの移動方向は「右」になっています。Enterキーで入力を終えた後は、
右に移動し、右端からは次の行の最初のオブジェクトに移動します。

ここで次の行の最初のオブジェクトとは、横方向で左端の意味ではなく、最上行の中で左側です。
つまり縦方向が優先になります。

●オブジェクトの定義上での位置
オブジェクトの始点位置は、左上の端です。オブジェクトの属性で[位置]のタブを開くと、
「始点X」、「始点Y」があります。
この始点位置が、オブジェクトの位置の基準点です。

質問の件は、Bのオブジェクトが背が高いと書かれています。つまり下端がそろっていて、
上端は不揃いなのだと思います。御自信も書かれている通り、これがCの次にAに移動しない原因です。
これは、Bの位置の方がAよりも上にあるため、Aより先と判定されるためです。

●表示モードでの移動
なお、冒頭に述べた設定で、Enterキーでの入力時はタブオーダー順に動きますが、
表示モードでの方向キー「→」での操作は、Cの次はBになり、Aには動きません。
ですから、横に並べるオブジェクトは、上端を揃えて横に並べるのが原則と考えた方がよいかと思います。

類似の話で、多数のコマンドボタンを縦横に並べたフォームで、
方向キーによって左右に表示通りに動かないケースを見た事があります。
外見では分らなかったのですが、横方向の位置が極わずかにずれていたため
その様な現象が起きていました。目視で判別できない1ピクセルのずれでも、その様な事が起きます。

佐田守弘(KS-00119)
29943 Re:次行へのカーソルの移動 讃岐のご隠居 2005/05/16-08:48
記事番号29932へのコメント
ありがとうございました。
この件は昔引っかかったことがあるのですが、そのときはサイズを揃えたら、
自然に解消したので、忘れていました。今回納得できる説明をいただきました。
 通常はデフォルトで済ますが、時に個別の値を入力する必要がある項目に、
この現象を利用することで省力化できるということでしょうか。
29954 Re:次行へのカーソルの移動 佐田 守弘 2005/05/16-23:55
記事番号29943へのコメント
讃岐のご隠居さん
 >通常はデフォルトで済ますが、時に個別の値を入力する必要がある項目に、この現象
 >を利用することで省力化できるということでしょうか。

通常はデフォルトで済ませ、必要な時に個別の値を入力するといったケースはよくあります。

しかし、「この現象」つまりオブジェクトの高さの位置がわずかに違うだけで、
フォーカスが行かないという現象を利用するのは、お薦めできる方法ではありません。
仮にそう言った操作ができたとしても、後から修正を加える時に、「どういう仕掛けにしたのか?」が自分でも分らなくなります。

この様な目的には、フォーカス禁止の設定をしたり、イベントを使って
次のどこにフォーカスを移動させるかを設定するのが本来の方法です。

佐田守弘(KS-00119)
29960 Re:次行へのカーソルの移動 讃岐のご隠居 2005/05/17-11:56
記事番号29954へのコメント
これも納得しました。

問題は解決したのですが、途中でシフト+下カーソルキーを使用して新しい行に移動する場合は
なぜか背の低いAに移動します。この場合桐はどのような判断をしているのでしょうか?
(XP+VER9SP1です。)
29965 Re:次行へのカーソルの移動 佐田 守弘 2005/05/17-23:15
記事番号29960へのコメント
讃岐のご隠居さん
実際のフォームと設定を見ていないので、本当の所は分りません。
カーソル↑、↓キーでの移動の場合には、同じ横位置で並んでいるオブジェクト群で
上下に動くのは普通ですが。

佐田守弘(KS-00119)

29995 Re:次行へのカーソルの移動 讃岐のご隠居 2005/05/20-08:49
記事番号29965へのコメント
速やかにレスを頂いたのに遅れて申訳ありません。
 教えていただいたようにタブオーダー順に設定すると、いずれもABCABCと動きますので、
実務上の問題は解決しています。
ところが設定せずに(継承)のままでの挙動が、フォームごとに違う場合がでたので、純粋になぜだろうとお尋ねしました。
 
今回の低位置にある項目Aに移動するというのは、編集中ではなく行挿入中の出来事です。
 (継承のまま)のフォームで行挿入モードで新しい行を入力中に最終行までいかず
途中の項目Bまででその行の入力を打切って、シフト+下矢印キーで次の行の入力に移ろうとした場合です。
一方同じフォームでも最終項目Cまでいってリターンキーで次の行に移る場合は原則通Aをスキップして
最も高い位置にあるBへ移ります。この違いが原則に反しているようなので不審に思った訳です。
 
29997 Re:次行へのカーソルの移動 佐田 守弘 2005/05/20-21:23
記事番号29995へのコメント
讃岐のご隠居さん
方向キーで右方向に移動させて次の行に移動した時には、最初のコメントにも書いた様に、
次の行で最も高い位置にあるオブジェクトに移動する事は確かなのですが、
左方向に移動させた時には別の動きをする様ですね。

いずれにしても私が書いた「法則」は、あくまでも私の経験則であり、桐の仕様上で
どうなっているかの情報は、公開されているわけではないので、正確なところは、分りません。
もしこの挙動について気になる場合には、様々なケースを作って、自分で確かめて
法則性を見付けるのが宜しいかと思います。

私としてはその様なカーソルキーで順に動かないのは不便なので、基本的には、
(特にコマンドボタンの場合には)可能な限りオブジェクトのサイズを揃え、縦横位置が
揃う様に配置する様にしています。

テキストオブジェクトでも同様で、可能な限りサイズや縦横位置を揃える、
といった配置で設計します。
そして、フォーカスする必要のないオブジェクトや、右方向以外に移動させたい様な場合には、
下方向を設定するなどして、最も使いやすい順序で動くようにしています。
そしてそれでも使いやすい順序にならない場合には、最後の手段として、
イベントでフォーカス位置を設定するといった方法を併用します。

佐田守弘(KS-00119)

戻る