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