type 
  TForm1 = class(TForm)
   ...
  private
   x:integer;
   procedure ButtonClick(Sender: TObject);
...
procedure TForm1.ButtonClick(Sender: TObject);
begin
  ShowMessage('OK');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  Inc(x,100);
  with TButton.Create(Self) do
  begin
    parent:=self;
    Left:=x;
    Top:=50;
    OnClick:=ButtonClick;
  end;
end;

解决方案 »

  1.   

    button要有唯一的标识呀!他的标识就是name,所以每生成一个你要给他指定一个唯一的name
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        x:integer;
        procedure ButtonClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ButtonClick(Sender: TObject);
    begin
      ShowMessage((Sender as TButton).Name);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Inc(x);
      with TButton.Create(SElf) do
      begin
        parent:=self;
        Left:=X*100;
        Top:=50;
        Name:='Button'+IntToStr(x);
        OnClick:=ButtonClick;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      x:=1;
    end;end.