Delphi 关于动态生成控件的问题
跪求实例:在窗口内放一个Tbutton,其功能为:1.点击后按钮后可以再窗口上生成一个Tbutton:dynamicbutton1和一个TEdit:dynamicedit...
跪求实例:
在窗口内放一个Tbutton,其功能为:
1.点击后按钮后可以再窗口上生成一个Tbutton :dynamicbutton1和一个 TEdit:dynamicedit,dynamicbutton1的name 设为B1 ,dynamicedit1的name 为E1 ,且Text为‘1’
2.再点击能在生成另一组Tbutton和 TEdit,Dynamicbutton2.name=B2 Dynamicedit2.name=e2 dynamicedit2.text='2' 以此类推
最后要求所有动态生成出来的按钮dynamicbuttonN被按下后都能在根目录下成成一个存有dynamiceditN.text的TXT文件 展开
在窗口内放一个Tbutton,其功能为:
1.点击后按钮后可以再窗口上生成一个Tbutton :dynamicbutton1和一个 TEdit:dynamicedit,dynamicbutton1的name 设为B1 ,dynamicedit1的name 为E1 ,且Text为‘1’
2.再点击能在生成另一组Tbutton和 TEdit,Dynamicbutton2.name=B2 Dynamicedit2.name=e2 dynamicedit2.text='2' 以此类推
最后要求所有动态生成出来的按钮dynamicbuttonN被按下后都能在根目录下成成一个存有dynamiceditN.text的TXT文件 展开
展开全部
var
I :Integer = 1;
F :TextFile;
Path :String;
procedure TForm1.Button1Click(Sender: TObject);
var
B :TButton;
E :TEdit;
begin
E := TEdit.Create(Self); //动态创建Tedit控件
E.Parent := Self; //指定edit控件的父类是窗体。
E.SetBounds(100 * I,40,50,20);
E.Text := IntToStr(I); //初始控件的text属性.
E.Name := 'E' + IntToStr(I); //重命名控件
E.Tag := I; //控件的标识信息.
Path := 'dynamiceditN.txt';
B := TButton.Create(Self);
B.Parent := Self;
B.SetBounds(100*I,20,40,20);
B.OnClick := ButtonOnClick;
B.Name:='B' + IntToStr(I);
B.Tag := I;
Inc(I);
end;
procedure TForm1.ButtonOnClick(Sender: TObject);
var J:Integer;
begin
try
AssignFile(F,path);
if not FileExists(Path) then begin //判断是否存在文件
ReWrite(F); //如果不存在就建立一个空文件.
end else Append(F);//如果存在就以追加方式打开文件.
for J := 0 to Self.ControlCount -1 do //遍历窗体所有控件.
if (Self.Controls[J] is TEdit) and (Self.Controls[J].Tag = TButton(Sender).Tag) then begin
WriteLn(F,TEdit(Self.Controls[J]).Text); //条件1:是否是TEdit控件.条件2:是否与按钮相对应
Break; //找到一个后就跳出.因为只是单击一个按钮一下.
end;
finally
CloseFile(F); //关闭文件.
end;
end;
够明白吗?.在Delghi7已经给你测试过了.以上代码属于个人所写..
I :Integer = 1;
F :TextFile;
Path :String;
procedure TForm1.Button1Click(Sender: TObject);
var
B :TButton;
E :TEdit;
begin
E := TEdit.Create(Self); //动态创建Tedit控件
E.Parent := Self; //指定edit控件的父类是窗体。
E.SetBounds(100 * I,40,50,20);
E.Text := IntToStr(I); //初始控件的text属性.
E.Name := 'E' + IntToStr(I); //重命名控件
E.Tag := I; //控件的标识信息.
Path := 'dynamiceditN.txt';
B := TButton.Create(Self);
B.Parent := Self;
B.SetBounds(100*I,20,40,20);
B.OnClick := ButtonOnClick;
B.Name:='B' + IntToStr(I);
B.Tag := I;
Inc(I);
end;
procedure TForm1.ButtonOnClick(Sender: TObject);
var J:Integer;
begin
try
AssignFile(F,path);
if not FileExists(Path) then begin //判断是否存在文件
ReWrite(F); //如果不存在就建立一个空文件.
end else Append(F);//如果存在就以追加方式打开文件.
for J := 0 to Self.ControlCount -1 do //遍历窗体所有控件.
if (Self.Controls[J] is TEdit) and (Self.Controls[J].Tag = TButton(Sender).Tag) then begin
WriteLn(F,TEdit(Self.Controls[J]).Text); //条件1:是否是TEdit控件.条件2:是否与按钮相对应
Break; //找到一个后就跳出.因为只是单击一个按钮一下.
end;
finally
CloseFile(F); //关闭文件.
end;
end;
够明白吗?.在Delghi7已经给你测试过了.以上代码属于个人所写..
追问
终于遇到大神了!!!感激不尽!!!
在书上看到了 self.components 这个东西和 self.controls 有什么关系?这两个东西都是什么意思啊? self.tag 可以随便赋值么?他的使用方法是什么?
呃 还想问……self 是个什么东西啊 他都有什么属性或者功能?
procedure TForm1.ButtonOnClick(Sender: TObject); 这句话是自己输入进去的么?
追答
1. Self这里代表窗体本身(就是Form1).self.components和self.controls都是代表窗体上的控件.
2. TControl是所有可视控件的父类。而TComponent也包括非可视控件。这两个的区别说来话很长,你以后再慢慢了解.他们用法大概相同就是了.
3. self.tag可以随便赋值.这个tag是每个控件都自身所带的.可以用来标识区分同类控件.系统自动产生的tag值都是唯一的.
4. "procedure TForm1.ButtonOnClick(Sender: TObject); "这句是.在这里 B.OnClick := ButtonOnClick;已经给它声明好了.就是说B的单击事件会触发ButtonOnClick事件.这时你要自己做好这个ButtonOnClick事件的处理过程了.或者执行为空也行.总之要声明给它.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询