重复用户指定次数的过程

时间:2017-01-17 10:35:11

标签: delphi

我有很多程序可以在用户点击按钮时动态创建TButton。以下代码就是一个例子:

procedure TForm1.Button2Click(Sender: TObject);

 begin

 if not Assigned(FSeatButton) then begin

   FSeatButton := TButton.Create(self);
   FSeatButton.Parent := self;
   FSeatButton.Left := 100;
   FSeatButton.Top := 100;
   FSeatButton.Width := 62;
   FSeatButton.Height := 25;
   FSeatButton.Caption := ('Seat');
   FSeatButton.OnMouseDown := ButtonMouseDown;
   FSeatButton.OnMouseMove := ButtonMouseMove;
   FSeatButton.OnMouseUp := ButtonMouseUp;

 end;
 end;

这会创建一个Tbutton,用户可以通过底部3程序拖动它。每次用户点击button2时我都需要重复此过程但是如果我使用for / repeat循环id必须指定何时结束它,但我不知道用户需要生成多少个按钮。

另外(这可能是另一个问题的想法),如何保存使用自己的ID创建的每个按钮,如E.G Button1,Button2 ... ButtonN。我猜我需要某种变量,每当用户点击按钮时它就会增加,并且它以某种方式包含在名称E.G ButtonI

2 个答案:

答案 0 :(得分:5)

听起来您只需要跟踪已添加的所有按钮。使用容器来执行此操作:

在类型声明中添加一个容器:

uses
  System.Generics.Collections;

....

FButtons: TList<TButton>;

在表单的构造函数中实例化它,并在析构函数中将其销毁。如果您愿意,也可以使用OnCreateOnDestroy个活动。

然后,当您创建按钮时,将其添加到列表中:

procedure TForm1.Button2Click(Sender: TObject);
var
  Button: TButton;
begin
  Button := TButton.Create(self);
  Button.Parent := Self;
  Button.Left := 100;
  // etc.

  FButtons.Add(Button);
end;

如果您在创建按钮后不需要参考按钮,那么您不需要列表,您可以这样做:

procedure TForm1.Button2Click(Sender: TObject);
var
  Button: TButton;
begin
  Button := TButton.Create(self);
  Button.Parent := Self;
  Button.Left := 100;
end;

答案 1 :(得分:2)

声明FSeatButton : array of TButton; 这样,您就可以获得添加按钮的唯一实例,并可以按顺序命名。

每次点击Button2时,都会向数组中添加一个新按钮:

procedure TForm1.Button2Click(Sender: TObject);
var
  len: Integer;
begin
  len := Length(FSeatButton);
  SetLength(FSeatButton,len+1);
  FSeatButton[len] := TButton.Create(self);
  FSeatButton[len].Name := 'SeatButton'+IntToStr(len);
  etc...
end;