动态生成N多行控件,每行有三个控件,分别是:  文本框A 文本框B   DateTimePickerA多少行由另一个文件框控制着...当在这个文本框里回车事件得到响应后,就要动生要N行控件........请大家给出方法,最好给源码

解决方案 »

  1.   

    生成控件,设置父亲,设置left,top属性等
      

  2.   

    在edit的keypress事件里
    var i,num:integer ;
    if key = 13 then
    begin
      try
        num := strtoint(edit.text) ;
      except
        exit ;
      end ;
      if num >0 then
      begin
        for i:=0 to num-1 do
        begin
          with tedit.create(self) do
          begin
            left := edit.left + edit.width +10 ;
            top :=  edit.top+30*i;
            parent := self ;
          end 
          with tedit.create(self) do
          begin
            left := edit.left + edit.width +140 ;
            top :=  edit.top+30*i;
            parent := self ;
          end 
          with tDatetimepacker.create(self) do
          begin
            left := edit.left + edit.width +250 ;
            top :=  edit.top+30*i;
            parent := self ;
          end 
        end
      end ;
    end ;
      

  3.   

    type
      MyCompRecord=record
        Edit1:tedit;
        Edit2:tedit;
        Datetimepacker1:TDatetimepacker;
      End;
    .
    .
    .
    const 
      Edit1Left=20;
      Edit1width=80;
      Edit2Left=140;
      Edit2width=80;
      DatetimepackerLeft=260;
      DatetimepackerWidth=100;
      ArrayTop=20;
      LineSpace=20;var
      MyRecord:array of MyCompRecord;
    .
    .
    .
    begin
      Setlength(MyRecord,num);
      Form i:=1 to num do
      with MyRecord do
      begin
        Edit1:=TEdit.Create(nil);
        Edit1.top:=ArrayTop+(num-1)*LineSpace;
        Edit1.Left:=Edit1Left;
        Edit1.width:=Edit1width;
        Edit1.parent:=
        Edit2:=TEdit.Create(nil);
        Edit2.top:=ArrayTop+(num-1)*LineSpace;
        Edit2.Left:=Edit2Left;
        Edit2.width:=Edit2width;
        Edit2.parent:=
        Datetimepacker1:=TDatetimepacker.Create(nil);
        Datetimepacker1.top:=ArrayTop+(num-1)*LineSpace;
        Datetimepacker1.Left:=Datetimepacker1Left;
        Datetimepacker1.width:=Datetimepacker1width;
        Datetimepacker1.parent:=
      
      end;可根据数组下标访问组件,灵活性高,如果你不想访问组件另当别论
      

  4.   

    begin
      Setlength(MyRecord,num);
      Form i:=1 to num do
      with MyRecord do  应改成  with MyRecord[i] do
      begin
      

  5.   

    忘了Pascal的数组下标是从0开始的了 
    Form i:=0 to num-1 do