自动生成界面的问题

wlq 2000-03-28 06:20:00
这是一数据库的录入界面,label的edit都是自动生成,请看代码,运行后,
我用componentcount方法没有发现组件生成,不知何故



......
type Label1=array[1..30] of Tlabel; //要生成的label和edit放在数组中
type edit1=array[1..30]of Tedit;
var
Form1: TForm1;
mylabel:label1;
myedit:edit1;
implementation
......
procedure TForm1.test1Click(Sender: TObject); //请看这一段,窗体上已经有了一个edit和
label,它们是两个数组mylabel[i]和myedit[i]的
第一个元素,为以后的元件提供基准位置
var i:integer;
llabel:Tlabel;
eedit:Tedit; //我把eedit,llabel做中间变量,create后赋给数组,赋完了
把它destroy,不知可否
begin
llabel:=Tlabel.Create(self);
eedit:=Tedit.Create(self);
mylabel[1]:=llabel;
myedit[1]:=eedit;
mylabel[1].caption:=content[0].field_bz;
myedit[1].text:=table1.FieldByName(content[0].field_name).asstring;
llabel.Destroy;
eedit.Destroy;
for i:=2 to count do begin //count是表的字段数
llabel:=Tlabel.Create(self);
mylabel[i]:=llabel;
myLabel[i].caption:=content[i-1].field_bz; //content是一个记录类型的数组,放数据字
典的,不必理它
mylabel[i].top:=mylabel[i-1].top+25;
mylabel[i].left:=mylabel[i-1].left;
mylabel[i].width:=mylabel[i-1].width;
mylabel[i].height:=mylabel[i-1].height;
mylabel[i].parent:=self;
mylabel[i].visible:=true;
llabel.Destroy;
end;
end;

我用form1的componentcount方法看不到组件生成.按理说在初始化时就该为两个Tlabel和Tedit类型的数组分配内存的?

...全文
234 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jll 2000-03-29
  • 打赏
  • 举报
回复
你的Button不是有编号的吗?
bitter 2000-03-29
  • 打赏
  • 举报
回复
设定button的tag不就可以了。
wlq 2000-03-29
  • 打赏
  • 举报
回复
我会了:
if sender=mybutton[i] then
...
多谢各位
wlq 2000-03-29
  • 打赏
  • 举报
回复
具体怎么写?
我delphi用了才两个月的说
wlq 2000-03-29
  • 打赏
  • 举报
回复
问题解决了
去掉destroy就好了
谢谢kxy
末了我想再问个问题,某些字段后我又生成了一个button,
因为是动态生成所以让所有的button共用一个事件处理过程那么,我
如何判断是哪一个 button按下
kxy 2000-03-28
  • 打赏
  • 举报
回复
把label.Destory去掉,delphi在form释放时会自动处理。
你的form要动态创建,
也可以在FormOnClose时手工释放。
wlq 2000-03-28
  • 打赏
  • 举报
回复
to kxy:
那么,我该如何做呢?
kxy 2000-03-28
  • 打赏
  • 举报
回复
delphi中对象的变量是引用而不是指针,这和C++中不同。
var
slist : TStringList;
begin
slist := TSTringList.Create;//这里,一定要Create.
end;
TLabel等VCL可视控件也一样。
我们假设 C++中有一个TLabel的类,C++中 TLabel alabel; 会分配内村。
但是delphi中 var label : TLabel 是声明了一个引用。相当于C++中
TLabel &alabel ;
kxy 2000-03-28
  • 打赏
  • 举报
回复
OK,你把它Destroy了,自然没有了。
delphi 中 如 label : TLabel; bLabel:TLabel; label,blabel是引用
label := TLabel.Create(Self); blabel := label,
blable和alable指向同一个内存地址, label.Destroy, blabel也没有了。
另,使用Free,不要用Destory. Free后要 := nil;

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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