在一个Form中有多个Panel,想依据数据库中的数据进行修改。(100分)

Z

z1234

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的一个Form中有上百个Panel,每个代表数据表中的一条记录。要求根据数据来
更改每个Panel的属性。
如何动态创建Panel并依据数据表中的记录对每个的属性进行动态修改?
如果一个个的画然后在设置循环来一个个修改那要写多少行雷同的Panel**.Caption:=
啊,晕倒!!!
 
用TList来维护啊
在每个Panel上作上标记
如在数据库中有一个ID字段来唯一标示Panel
p=Tpanel.create(self);
p.tag=fields[id]
List.add(p)
就行了
 
当然要一个一个的写,不过你可以用Tobjectlist
var
pane : Tpanel

objlist : Tobjectlist;
i : integer;
begin
objlist := Tobjectlist.create;
while not query.eof do
begin
inc(i);
pane := Tpanel.create(self);
pane.parent := self;
pane.left:=.......
pane.caption := query.fieldbyname('name').asstring;
objlist.add(pane);//objlist, pane要设置为全局的
end;
end;

调用时
Tpane(objlist).caption;
...
...
 
这样解决
---------------------------------------------------
var
NewPanel:TPanel;
begin
NewPanel := TPanel.create(self);
NewPanel.name := 名称;
。。。。
end;
这里的关键是把TPanel的名称与数据库中的记录关联。
可以通过
FindComponent('TPanel名称');//具体使用方法查看帮助
来找到相应的TPanel
然后想什么时候修改就什么时候修改了
 
不好意思因为我出差去了,所以帖子回晚了。yoking与eric的答案实际为一回事,但是只能
创建一个Panel而不是我所要求的根据数据记录来创建。而且不能在DLL中使用、也不够稳定
常报“非法错误”。但是他们提供给了我很好的启发,desertsmoke的方法虽然较古板但确
挺稳定,而且适用的范围较广。
但是他们的方法都不能很好的实现我的想法,我现在使用desertsmoke的方法加上一点修改
后可以使用,但也不能根据数据记录的多寡来决定Panel的多寡。还有更好的思路吗?
 
顶部