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 に答える