说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何在一个窗体内对动态产生的多个同名控件分别进行控制?

编辑:说三道四文库 发布时间:2018-06-22 12:04
HTML文档下载 WORD文档下载 PDF文档下载
在开发一个数据库软件时,要由用户自行设计输入项目, 此时程序需要根据用户的选择动态的产生诸如EDIT,LISTBOX等控件, 但由于无法事先知道用户会产生多少个控件, 就只能用:
var
edit1;tedit;
begin
edit1:=tedit.create(self);
...
这样的语句来产生控件,而在用户操作后,就可能会在一个窗体内产生多少同名控件。 
不知道有什么方法可以对这多个同名控件分别进行控制和取值,


 TForm1 = class(TForm)
 private
  List: TList;
  ..
 end;

procedure TForm1.FormCreate(..
begin
  List := TList.Create;
end;

procedure TForm1.YourProc(...
var
  Edit: TEdit;
  ListBox: TListBox;
begin
  Edit := TEdit.Create(Self);
  List.Add(Edit);
  ListBox := TListBox.Create(Self);
  List.Add(Listbox);

end;

procedure TForm1.FormDestroy(...
var
  i: Integer;
begin
  for i := 0 to List.Count - 1 do
    TObject(List[i]).Free;
  List.Free;
end;
比如要对产生的edit控件text属性赋值'ok'
procedure EditGetOk;
var
  i:integer;
beign
   for i:=1 to form1.controlcount do
     if (form1.controls[i-1] is Tedit) then
          (form1.controls[i-1] as Tedit).text:='ok';
end;
   
动态生成的控件的HANDLE完全不同,并且,动态生成的控件最好用HANDLE区别。
也可以给控件的TAG属性赋值,来区别各个控件。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘