各位达人:
用create方法创建了一个几个动态按钮怎么相应?
......
var
button:TButton;
begin
  for i:=1 to 5 do
  begin
  button:=TButton.Create(nil);
  ......
  end;
end;
请问:
这里创建了5个按钮控件
1 怎么来编写代码相应鼠标的单击事件?
2 这5个按钮,他们的名字是什么?
谢谢!

解决方案 »

  1.   

    自定义一个过程
     procedure MyButtonClick(Sender: TObject);
    begin
    if Sender is Tbutton then
    Tbutton(Sender)//该干嘛干嘛
    end;创建按钮的时候
    Button.OnClick:=MyButtonClick;
    如果要区分不同的按钮可以在创建的时候在Button.tag加个标识
    用showmessage(Button.name);看看名称
      

  2.   

    var 
    button:TButton; 
    begin 
      for i:=1 to 5 do 
      begin 
      button:=TButton.Create(nil); 
      button.name := 'a'+ inttostr(i); //这样给控件个名字
      case i of
        1:  Button.OnClick:=MyButton1Click; //这样给按钮给个事件
        2:  Button.OnClick:=MyButton2Click; //这样给按钮给个事件
         .
        .
        .
      end;
      ...... 
      end; 
    end; 
      

  3.   

        1:  Button.OnClick:=MyButton1Click; //这样给按钮给个事件
        2:  Button.OnClick:=MyButton2Click; //这样给按钮给个事件 __________________________
    如果有100个按钮的话怎么办?事先写100个MyButtonClick?
      

  4.   

      private
        { Private declarations }
        procedure ButtonClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ButtonClick(Sender: TObject);
    begin
      //
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
    button:TButton;
    I:Integer;
    begin
      for i:=1 to 5 do
      begin
        button:=TButton.Create(nil);
        ....
        button.Tag:=I;
        button.OnClick:=ButtonClick;
      end;
    end;
      

  5.   

    晕,楼主不至于这样吧,我只是举例啊,如果你的button相应事件是一样的就给一个事件就好了!
      

  6.   

    "如果有100个按钮的话怎么办?事先写100个MyButtonClick?"
    如果你要静态的拖拉100个按钮,你是不是要托100次?
    如果每个按钮相应的事件都不一样,你是不是要写100次?
      

  7.   

    就是,我正想说与 dd_zhouqian  一样的话.
    楼主自己都不考虑清楚事件的全部,就打100的比方.
      

  8.   

    100的比方是我说的,怎么我成了楼主?
    我是说 hmzgz81 的例子不怎么好
      case i of
        1:  Button.OnClick:=MyButton1Click; //这样给按钮给个事件
        2:  Button.OnClick:=MyButton2Click; //这样给按钮给个事件
      end; 
      

  9.   

    第1点“ccdarkness”的方法就很不错。
    第2点如果你创建的时候没有给它们命名,它们就没有名字。
      

  10.   

    4楼的方式才是比较好用的
    共用处理过程写法:
    procedure TForm1.ButtonClick(Sender: TObject);
    begin
      //..
      case (Sender as TButton).Tag of
        1:  doFunc1();
        2:  doFunc2();
         ...
        n:
      end;
    end;
      

  11.   

    ccdarkness :
      哈,看错了,那就是说你啦,别生气噢