代码OnClick事件处理程序的按钮数组delphi

时间:2013-12-05 16:50:45

标签: arrays delphi runtime arrayobject

基本上我要做的是在运行时创建一个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.  

感谢。 -Benjamin。

2 个答案:

答案 0 :(得分:2)

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

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

BTW,this是一个可怕的事件处理程序名称。使用描述性的东西要好得多,以便稍后当你(或其他人)阅读代码时,它会清楚它的用途。像这样的东西,例如:

procedure TForm1.ButtonFromArrayClick(Sender: TObject);

答案 1 :(得分:1)

您需要将Sender强制转换为Button。在。

TButton(Sender).Caption := 'avasfd';