我在FormCreate中创建了10个按钮,然后我想让每个按钮可以有各自的OnClick事件,最好是在一个事件代码中做到可以处理所有按钮的OnClick事件(注:按钮是动态产生的,但有多少事件要处理是预先定好的,只不过没有这个按钮的话,预定的事件就不会发生)-我的设想是通过判断CardBtn的Caption属性处理。procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  cardBtn: Array of TButton;
begin
  SetLength(cardBtn,10);
  For I:=Low(cardBtn) to High(cardBtn) do
  begin
    cardBtn[I]:=TSeSkinButton.Create(self);
    cardBtn[I].Parent:=Form1;    cardBtn[I].Left:=12+I*91;
    cardBtn[I].Top:=0;
    cardBtn[I].width:=91;
    cardBtn[I].height:=26;    //真正的Caption是从一个配置文件中读取出来的
    cardBtn[I].caption:='卡片'+IntToStr(I);
  end;
end;

解决方案 »

  1.   

    自己定义一个函数,响应onclick事件
    procedure TForm1.DispatchClick(Sender: TObject);
    begin
      if TButton(Sender).Caption = 'button1' then ShowMessage('button1')
      else if TButton(Sender).Caption = 'button2' then ShowMessage('button2');
    end;
    在formcreate时指定事件,形如
    procedure TForm1.FormCreate(Sender: TObject);
    var
      I: Integer;
      cardBtn: Array of TButton;
    begin
      SetLength(cardBtn,10);
      For I:=Low(cardBtn) to High(cardBtn) do
      begin
        cardBtn[I]:=TButton.Create(self);
        cardBtn[I].Parent:=Form1;    cardBtn[I].Left:=12+I*91;
        cardBtn[I].Top:=0;
        cardBtn[I].width:=91;
        cardBtn[I].height:=26;    //真正的Caption是从一个配置文件中读取出来的
        cardBtn[I].caption:= 'button'+IntToStr(I);
        //加这条语句,指派响应onclick的事件
        cardBtn[I].OnClick := form1.DispatchClick;
      end;
    end;
      

  2.   

    cardBtn[I].OnClick=MyClickEvent;在Form1上放一个TSeSkinButton,编写点击事件(即MyClickEvent),再删掉即可
    判断是哪个控件可用Sender
    if (Sender as TSeSkinButton).Caption=xxx then
      

  3.   

    同意楼上意见。在写公用点击事件的时候可以通过判断该按钮的Tag来分配各自的点击事件
    如:
      if sender is Tbutton then
      case TControl(sender).Tag of
      1:
      2:
      3:
      4:
      ................
      end;
    或者通过按钮NAME最后的的数字位为依据也可