我正在运行 Lazarus 0.9.30.2。
我有一个 TForm,上面有一个 TPageControl。在 TPageControl 中有一系列 TTabSheets。在运行时,TTabSheets 的顺序与设计时不同(见图)。
设计时的顺序是我想在运行时看到的,至少在表单第一次显示时是这样。为什么订单在运行时会发生变化,有没有办法控制它?
我正在运行 Lazarus 0.9.30.2。
我有一个 TForm,上面有一个 TPageControl。在 TPageControl 中有一系列 TTabSheets。在运行时,TTabSheets 的顺序与设计时不同(见图)。
设计时的顺序是我想在运行时看到的,至少在表单第一次显示时是这样。为什么订单在运行时会发生变化,有没有办法控制它?
@TLama 是正确的,这与 Windows 选项卡控件在多行视图中的行为方式有关。您观察到的行为与处理多行选项卡的选择方式有关。当您选择一个选项卡时,它始终显示在底行,因为指示选择哪个选项卡的视觉提示只能真正适用于底行中的选项卡。
鉴于该约束,控件只需在您修改选定选项卡时重新排列选项卡行。这让用户感到非常困惑。好的 UI 设计永远不会让 UI 元素像这样改变位置。
很明显,这里发生的情况是,重新排列是在表单首次显示时在运行时发生的,无论出于何种原因,这都会导致与设计时排列不同的排列。鉴于用户只需选择它们就可以按任何顺序排列行,我不确定您是否应该担心行出现的顺序。
如果您在表单首次显示时强制执行特定安排,您可以将这样的代码添加到OnCreate
表单的处理程序中:
PageControl1.ActivePage := TabSheet9;
PageControl1.ActivePage := TabSheet5;
PageControl1.ActivePage := TabSheet1;
UI 设计的最佳实践是避免多行选项卡控件,我敦促您尝试以这种方式重新设计您的 UI。