0

基本上我要做的是在运行时创建一个 Tbutton 数组,并为每个创建的按钮创建 OnClick 事件处理程序。按钮的创建工作正常,请原谅试图让 OnClick 部分正确的微弱尝试。已广泛搜索但无济于事。我试图遵循 http://docwiki.embarcadero.com/RADStudio/XE5/en/Events上的代码,但很难遵循。不知道这是否是我一直在寻找的东西。

  procedure this(sender:TObject);
  end;

var
  Form1: TForm1;
  x: Integer;
  y: Integer;
  p:array [1..3,1..3] of Tbutton;


implementation

{$R *.dfm}

procedure TForm1.t(Sender: TObject);

begin
for x := 1 to 3 do
  for y := 1 to 3 do
      begin
         p[x,y]:=tbutton.Create(nil);
         p[x,y].Parent:=form1;
         p[x,y].height:=Round(Height/3);
         p[x,y].Width:=Round(width/3);
         p[x,y].Left:=(x-1)*(p[x,y].Width);
         p[x,y].Top:=(y-1)*(p[x,y].height);
         p[x,y].OnClick:=this;
      end;
end;

procedure TForm1.this(sender: TObject);
begin
p[x,y].Caption:='avasfd';
end;

end.  

谢谢。-本杰明。

4

2 回答 2

2

您需要Sender在事件处理程序中进行类型转换(它将是单击的按钮):

procedure TForm1.this(sender: TObject);
begin
    (Sender as TButton).Caption := 'avasfd';
end;

顺便说一句,this对于事件处理程序来说,这是一个糟糕的名字。使用描述性的东西会更好,这样以后当您(或其他人)阅读代码时,就会清楚它的用途。像这样的东西,例如:

procedure TForm1.ButtonFromArrayClick(Sender: TObject);
于 2013-12-05T16:57:11.507 回答
1

您需要将 Sender 转换为 TButton。IE

TButton(Sender).Caption := 'avasfd';
于 2013-12-05T16:57:01.117 回答