季世平大哥:请教一个问题,

yangguo_god 2002-08-05 05:59:52
如何动态的创建n个Label,n为一个表的记录数,Label1,2,3,4,...caption的值分别对应表中的一个字段下n个记录,
如何动态的进行排版》
季大哥,麻烦你了
...全文
37 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangguo_god 2002-08-06
  • 打赏
  • 举报
回复
我明白了,不过,要怎么动态的创建label的事件了,而且如果我在form的create事件中创建这些元件,如果要在其他的事件中访问这些动态创建的元件,是不是要重新定义,还是可以直接访问
yangguo_god 2002-08-06
  • 打赏
  • 举报
回复
谢谢了,季大哥,
还有aawolf(羌狼) 大哥,改天再向你请教,买单
aawolf 2002-08-06
  • 打赏
  • 举报
回复
我有个建议,动态创建Label后把它存入一个vector里,然后在不同的地方调用。
给你篇文章看,可能有用。
http://www.csdn.net/Develop/article/14/14493.shtm
卖瓜啦!
jishiping 2002-08-06
  • 打赏
  • 举报
回复
当然可以了,如果已经Form的变量名为Form1,那么可以:
TLabel* Label = (TLabel*)Form1->FindComponent(
"Label10");
if (Label != NULL) Label->Top = Label->Top+5;
yangguo_god 2002-08-06
  • 打赏
  • 举报
回复
如果要对这些动态创建的控件,单独访问某一个,是不是,直接访问就可以了,
在其他窗口是不是也可以这么访问这些动态的控件
jishiping 2002-08-06
  • 打赏
  • 举报
回复
你需要先在class里写好TLabel的事件函数,假设这些TLabel的OnClick
事件函数为LabelClick,动态生成TLabel的事件:
TLabel* Label = new TLabel(this);
Label->OnClick = LabelClick;
//.......
要在其他的事件中访问这些动态创建的元件,可以根据动态生成的TLabel
的名字来查找这些TLabel。如:上面动态生成的TLabel的名字为Label0,
Label1, .... 那么可以用下面的方法访问这些TLabel:
for(int n=0; n<10; n++) {
TLabel* Label = (TLabel*)FindComponent(
AnsiString("Label")+n);
if (Label != NULL)
Label->Top = Label->Top+5;
}
jishiping 2002-08-05
  • 打赏
  • 举报
回复
一个一个来计算其位置就没有必要了。不考虑其它的控件,比如在Form上,
每行放5个TLabel的话,就可以这样啊(边上空4个像素):
for(int n=0; !Query1->Eof; n++,Query1->Next()) {
TLabel* Label = new TLabel(this);
Label->Parent = this;
Label->Name = AnsiString("Label") + n;
Label->Left = 4 + (n%5)*(ClientWidth-8)/5;
Label->Top = 4 + n/5 * abs(Label->Font->Height);

//这儿假设是将第一个字段的值显示出来
Label->Caption = Query1->Fields->Fields[0]->AsString;
}
whitelion 2002-08-05
  • 打赏
  • 举报
回复
千万别怕麻烦,一个一个来计算其位置
jishiping 2002-08-05
  • 打赏
  • 举报
回复
至于每个TLabel的位置,你自己指定了。我想一个Form上,除了这些TLabel
之外,你可能还会放一些其它的控件。所以,具体的布局,需要根据具体情
况具体分析。

//.....假设这儿Query1已经打开了(如果是Table,将Query1换成
//Table1就可以了)
for(int n=1; !Query1->Eof; n++,Query1->Next()) {
TLabel* Label = new TLabel(this);
Label->Parent = this;
Label->Left = xxx; //指定位置,这儿由你自己填充了
Label->Top = xxx;
//这儿假设是将第一个字段的值显示出来
Label->Caption = Query1->Fields->Fields[0]->AsString;
}
wwxc18 2002-08-05
  • 打赏
  • 举报
回复
有一個關於創建動態TButton的程序供參考
//-- create button array

TButton *Button[10];

for (int i=0;i<10;i++)
{
Button[i] = new TButton(this);
Button[i]->Left = i*100+5;
Button[i]->Top = 10;
Button[i]->Width = 80;
Button[i]->Height = 30;
Button[i]->Caption = "Button"+(AnsiString)i;
Button[i]->Name = "Button"+(AnsiString)i;
Button[i]->Parent = Form1;
}


//-- drop Button Array
for (int i=0;i<10;i++)
delete Button[i];


aawolf 2002-08-05
  • 打赏
  • 举报
回复
动态排版?还是动态排序?
你是说让控件支持拖拽,还是支持排序?
这个问题好有趣,可惜不是问我的。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧