2009-06-05 211 views
1

我有一个广泛使用框架的应用程序,需要隐藏/显示某些按钮,具体取决于当时哪个窗体处于活动状态。为了保持按钮整洁和组织得当,我已经将它们放在面板上,并根据需要显示或隐藏每个窗体的面板。我的问题是每个表单最初创建时,即使我明确地告诉他们要将自己置于哪个订单中,框架上的面板仍然无序。隐藏并重新显示表格后,面板按正确顺序排列。有关如何从一开始就保持正确顺序的任何建议?Delphi应用程序问题中的框架行为

+1

“虽然我明确地告诉他们要把自己置于哪个阶段”你在说这个?在什么事件? – tekBlues 2009-06-05 21:21:57

+0

请详细说明一下。几行代码也不会伤害。 – 2009-06-05 21:34:07

+0

在FrameResize事件中,我将设置屏幕上所有面板的位置。基本上声明: pnCopyPaste.Postion:= 0; pnSaveLoad.Position:= 130; 等 从我已经能够做的测试中,事件在创建时以及当表单被调整大小时被击中,因为它确实需要在创建时调整大小。 – 2009-06-05 23:43:19

回答

3

而不是给面板显式位置,尝试给他们对齐。他们倾向于比方式更好,如果您调整表单的大小,他们会更好地调整大小。

1

你也可以尝试使用一个堆栈面板(或是它的流程面板?)作为面板的父母。那么你将得到一个订单,而不是一个位置来操纵。

1

也许你可以看看DevExpress LAyoutControl?无论我们是否显示或隐藏某些组/面板,它都可以帮助我们创建始终看起来很好的界面。它甚至允许运行时定制界面,如果你想要的话!

0

您可以尝试按坐标进行排列,即设置Top和Left。除非你的面板是一致的,否则这将始终有效(但它需要很多工作)。

0

我有这个问题,我发现,解决办法是做到这一点的FORMCREATE(或你的框架的CMShowingChanged法):

MyPanel1.Align := alNone; 
MyPanel2.Align := alNone; 
MyPanel1.Align := alBottom; 
MyPanel2.Align := alBottom; 

在您需要的秩序恢复 - 这似乎排序直观地下订单。