动态创建的控件,如何把事件写在一个公共的unit里面?

解决方案 »

  1.   

    可以通过TMethod的处理
    Unit中写:
    procedure Timer1Timer(Sender: TObject);
    begin
      MessageBox(0, 'aa', 'bb', 0);
    end;调用是
    var
      Method:TMethod;
    begin
       Method.Data := nil;
       Method.Code := @Timer1Timer;
       timer1.OnTimer:= TNotifyEvent(Method);
    end.http://lysoft.7u7.net
      

  2.   

    如果我的动态创建一个button,想把它的onclick写到一个公共的单元的里,怎么写呀?
      

  3.   

    不对,data := nil;会出问题的搂朱兄弟这个问题有些概念不清,事件和函数不一样,事件是方法,必须依附在对象上面,这里有一个从哪里取得上下文变量的问题,比方说,有一个form,form上有一个button,然后定义一个button的onclick事件,如下:tform1 = class(tform)
    button1: tbutton;
    procdure button1click(sender: tobject);
    end;procedure tform1.button1click(sender: tobject);
    begin
      showmessage(Self.caption);
    end;你看button1click这个方法,它要用到self.caption也就是form1的caption,这个self就是上下文变量你说的写在一个公共的单元里,假设也要动态创建象上面的button1的button,也就是这个button也要执行showmessage(form1.caption),那么如果不依附在form1上面,就得不到self,也无从得到caption
      

  4.   

    创建的时候返回控件的实例
    事件可以先写好函数,然后动态添加到按钮里。看看按钮click事件函数怎么写。我们现在很多函数都是动态挂在按钮上的,不难!