如何给动态创建的控件填加事件

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    beginend;procedure TForm1.FormCreate(Sender: TObject);
    var
      button:TButton;
    begin
      button:=TButton.Create(Self) ;
      button.OnClick := Button1Click;
    end;
      

  2.   

    先自己定义一个procedure yourproc(Sender:TObject;...) //参数列表要与控件事件的一致
    然后在创建控件后,
    控件名.事件:= yourProc;
      

  3.   

    是添加什么事件说清楚老兄!
    如果是添加如onclick这样的事件处理过程,直接写一个过程后,把它们对应上一行了:

    procedure ok(sender:object);
    begin
    ...........
    end;button1.oncilck:=ok;
      

  4.   

    var
      s:tbutton;
    begin
      s:=tbutton.create(self);
      s.onclick:=mmclick;//设置事件响应函数
    end;
    //另写一mmClick
    procedure mmClick(Sender as TObject);
    begin
    //Process..
    end;
      

  5.   

    如果动态创建100个BUTTON每个button实现showmessage(‘你按下 NO.'+X+'按扭')难道要创建100个过程??????????
      

  6.   

    建一个过程,每个button.OnClick := Button1Click;
      

  7.   

    没人能解决吗?郁闷…… 如果动态创建100个BUTTON每个button实现showmessage(‘你按下  NO.'+X+'按扭')难道要创建100个过程??????????
      

  8.   

    procedure TForm1.myfunction(Sender: TObject);
    begin
      showmessage('怎么还不明白!');
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i : Integer;
    begin
      for i := 0 to 100 do
        with TButton.Create(Self) do begin
          Parent := Self;
          OnClick := myfunction;
        end;
    end;
      

  9.   

    创建的时候
    Button.Targer = i;
    则showmessage时显示Button.Targer 
      

  10.   

    同一过程可以付给所有按扭的ONCLICK;
    如果在过程中需要知道是哪个按扭点击了可以用sender来判断。
      

  11.   

    没人能解决吗?郁闷…… 如果动态创建100个BUTTON每个button实现showmessage(‘你按下  NO.'+X+'按扭')难道要创建100个过程??????????
      

  12.   

    procedure myfunction(sender:object);
    begin
      showmessage(‘你按下'+(sender as tbutton).caption+'按扭');
    end;button1 :=tbutton1.Create(self);
    button1.Caption :='...';
    button1.oncilck:=myfunction;
      

  13.   

    没人能解决吗?郁闷…… 如果动态创建100个BUTTON每个button实现showmessage(‘你按下  NO.'+X+'按扭')难道要创建100个过程??????????
      

  14.   

    我来帮你解决,给点实际的:首先创建全局量
    var
      CBtem:array of Tcheckbox;然后再在需要的地方
    var 
    i:integer;
    begin
    Setlength(CBtem,100);    CBtem[i]:=Tcheckbox.Create(self);
        CBtem[i].Parent:=ScrollBox1;
        CBtem[i].Left:=20;
        CBtem[i].Top:=i*30;
        CBtem[i].Width:=200;
        CBtem[i].Name:='CBtem'+IntToStr(i);
        CBtem[i].Tag:=i;
        CBtem[i].Caption:=driverStr;
        CBtem[i].OnClick:=myCheckclick;
        CBtem[i].Show;
    end;再自定义CBTEM数组的CLICK事件
    procedure TForm1.MyCheckClick(sender:tobject);
    var
      k:integer;
    beginfor k:=1  to i-1  do
      begin  if (sender as tcheckbox).Tag=k then
        begin
        做你想做的;
        end;  end;end;
      

  15.   

    1、先为窗口类对象建立一个过程或者函数:
    procedure TForm1.MyShow(Sender:TObject);
    begin
      showmessage(‘你按下  NO.'+IntToStr(TButton(Sender).Tag+1)+'按扭')
    end;2、别忘记在窗口类的public或者pirvate部分加入以下声明:
    procedure MyShow(Sender:TObject);3、然后这样:
    VAR
      btn:array of TButton;4、再在创建BUTTON时这样写:
    ...
    setlength(btn,100)
    for i:=low(btn) to high(btn)  do
    begin
      btn[i]:=TButton.Create(Self) ;
      btn[i].tag:=i;//或者 Button.hint:=i;注意,这是关键
      btn[i].OnClick := MyShow;
    end;
    ...OK,至此一切搞定!
    记住,动态数组的下标从0开始!