私は Lazarus 0.9.30.2 を実行しています。
TPageControl がある TForm があります。TPageControl 内には、一連の TTabSheets があります。実行時の TTabSheets の順序は、設計時とは異なります (図を参照)。
設計時の順序は、少なくともフォームが最初に表示されるときに、実行時に見たいものです。実行時に順序が変わるのはなぜですか?これを制御する方法はありますか?
私は Lazarus 0.9.30.2 を実行しています。
TPageControl がある TForm があります。TPageControl 内には、一連の TTabSheets があります。実行時の TTabSheets の順序は、設計時とは異なります (図を参照)。
設計時の順序は、少なくともフォームが最初に表示されるときに、実行時に見たいものです。実行時に順序が変わるのはなぜですか?これを制御する方法はありますか?
@TLama は、これが複数行ビューでの Windows タブ コントロールの動作に関連しているという点で正しいです。観察している動作は、複数行のタブの選択が処理される方法に関連しています。タブを選択すると、常に一番下の行に表示されます。これは、どのタブが選択されているかを示す視覚的な合図が実際に機能するのは一番下の行のタブだけだからです。
その制約を考えると、選択したタブを変更するときに、コントロールは単にタブの行を再配置する必要があります。ユーザーにとっては驚くほど混乱します。優れた UI デザインでは、このように UI 要素の位置が変わることはありません。
明らかにここで何が起こっているかというと、実行時にフォームが最初に表示されたときに再配置が行われており、何らかの理由で設計時の配置とは異なる配置になっているということです。ユーザーが行を選択するだけで任意の順序で行を配置できることを考えると、行が表示される順序について心配する必要があるかどうかはわかりません.
フォームが最初に表示されたときに特定の配置を強制することに固執している場合は、次のようなコードをOnCreate
フォームのハンドラーに追加できます。
PageControl1.ActivePage := TabSheet9;
PageControl1.ActivePage := TabSheet5;
PageControl1.ActivePage := TabSheet1;
UI 設計のベスト プラクティスは、複数行のタブ コントロールを避けることです。UI をそのように再設計することをお勧めします。