因为要根据数据库中查询的字段数目确定编辑框数目,因此需要用变量i去控制动态生成i个edit编辑框,请问有什么方法可以实现!?

解决方案 »

  1.   

    我这个偷懒了,panel,button都先放上去了。
    procedure TFrmCodeSet.InitFormData(const aDataSource:TDataSource);
    var i,C:integer;
    begin  C :=0;  for i:=0 to aDataSource.DataSet.FieldCount-1 do
      begin
        if aDataSource.DataSet.Fields[i].Visible then
        begin
          With TLabel.Create(Self) do
          Try
            Parent :=Self.PnlData;
            Caption :=aDataSource.DataSet.Fields[i].DisplayLabel+':';
            Left :=18;
            Top :=20+32*C;
            AutoSize :=False;
            Width :=80;
          Except
            free;
          end;      if aDataSource.DataSet.Fields[i].FieldKind=fkData then
            With TDBEditEh.Create(Self) do
            Try
              Parent :=Self.PnlData;
              DataSource :=aDataSource;
              DataField :=aDataSource.DataSet.Fields[i].FieldName;
              Flat :=True;
              AlwaysShowBorder :=True;
              Left :=120;
              Top :=16+32*C;
              Width :=320;
              if ((C=0) and (aDataSource.State=dsEdit)) then
                Enabled :=False;
            Except
              free;
            end
          else if aDataSource.DataSet.Fields[i].FieldKind=fkLookup then
            With TDBLookupComboboxEh.Create(Self) do
            Try
              Parent :=Self.PnlData;
              DataSource :=aDataSource;
              DataField :=aDataSource.DataSet.Fields[i].FieldName;
              Flat :=True;
              AlwaysShowBorder :=True;
              Left :=120;
              Top :=16+32*C;
              Width :=320;
              if ((C=0) and (aDataSource.State=dsEdit)) then
                Enabled :=False;
            Except
              free;
            end
          else
            Continue; //其它类型暂不处理。
          Inc(C);
        end;
      end;
      Self.Height :=92+32*C;
    end;