动态创建几个Panel之后, 关于显示时对齐的问题(100分)

  • 主题发起人 主题发起人 大花鸡
  • 开始时间 开始时间

大花鸡

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中要动态创建一些Panel, 然后使用Align := alTop;
想让他们按生成的顺序从顶至底顺序排列 ( 比如先创建Panel1, 然后Panel2, ..., PanelX, 在窗体上显示时, 要求Panel1在最上面, PanelX在最下面). 可是实际使用中, 却是完全相反的顺序,后创建的显示在最上边,先创建的显示在最下面了, 即 PanelX在最上边, Panel1在最下面.
我应该怎么做, 才能让先创建的显示在上面,后创建的显示在下面?
我的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
Panel: TPanel;
begin
Panel := TPanel.Create(Self);
Panel.Caption := Edit1.Text;
Panel.Name := 'pnl_'+ Panel.Caption;
Panel.Align := alTop;
Panel.Parent := Self;
Panel.Visible := True;
end;
在D7中编程
 
老大,你可以反过来创建,或者在创建时不设置Align。 完成后根据创建顺序设置 Align
 
如果你用循环来创建的话可以用
for i := 10do
wnto 1do
...试试
 
Panel.SendToBack就ok!
 
我知道反过来创建是可以, 正着不行就反着来.
我现在是想知道正着创建如何解决这个问题.
循环时高位取起来麻烦. 是个未知数. 里面还有一堆复杂的操作, 如果这个Panel没有取到里面的内容数据, 也就是光一个空Panel 还得把它销毁呢.

Panel.SendToBack;
不好使. 还是一样的效果.
 
procedure TForm1.Button1Click(Sender: TObject);
var
Panel: TPanel;
i: integer;
begin
for i:=0 to 10do
begin
Panel := TPanel.Create(self);
Panel.Caption := IntToStr(i);
Panel.Name := 'pnl_'+ IntToStr(i);
Panel.SetBounds(0,20*i,50,20);
Panel.Align := alTop;
Panel.Parent := self;
Panel.Visible := True;
end;
end;
 
用Panel.Align := alTop;
不如用控件的锚定属性来得方便
 
々飞翔鸟々,正解
 
ball_cao:
用锚点来控制, 在MDI子窗体中不太好使, 设计时的样子和显示时不一样.
真有意思啊, 就加一个SetBounds, 就可以了, 谢谢大家的热情帮助. 谢谢々飞翔鸟々
 
接受答案了.
 
后退
顶部