在Delphi中从运行时数据库表创建按钮

在Delphi中从运行时数据库表创建按钮,delphi,Delphi,我想在运行时从数据库创建按钮。 例如,我有一个表,比如说用户。 我需要创建尽可能多的按钮,因为用户表包含 下面的代码就是这样做的。但我有个问题, 它只给我最后一个按钮,或者它把所有按钮放在其他按钮之上,我只看到最后一个按钮 我需要把按钮一个挨着一个 procedure TForm1.Button2Click(Sender: TObject); var Bt: TButton; i: Integer; begin Query1.First; while not Query1.Eof do

我想在运行时从数据库创建按钮。 例如,我有一个表,比如说用户。 我需要创建尽可能多的按钮,因为用户表包含

下面的代码就是这样做的。但我有个问题, 它只给我最后一个按钮,或者它把所有按钮放在其他按钮之上,我只看到最后一个按钮

我需要把按钮一个挨着一个

procedure TForm1.Button2Click(Sender: TObject);
var
Bt: TButton;
i: Integer;
begin
Query1.First;
  while not Query1.Eof do
   begin
    i:=0;
    Bt := TButton.Create(Self);
    Bt.Caption := Query1.Fields[0].AsString;
    Bt.Parent := Self;
    Bt.Height := 23;
    Bt.Width := 100;
    Bt.Left := 10;
    Bt.Top := 10 + i * 25;

    i:= i+1;
    Query1.Next;
  end;
end;

我应该更改或添加什么?

您可以在每次循环迭代时重置
I
计数器。在进入循环之前初始化一次:

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;  
  Bt: TButton;  
begin
  Query1.First;
  i := 0; // initialize the counter before you enter the loop
  while not Query1.Eof do
  begin
    Bt := TButton.Create(Self);
    Bt.Caption := Query1.Fields[0].AsString;
    Bt.Parent := Self;
    Bt.Height := 23;
    Bt.Width := 100;
    Bt.Left := 10;
    Bt.Top := 10 + i * 25;
    i := i + 1;
    Query1.Next;
  end;
end;