我动态生成了一个控件,如何写它的事件,比如让它响应click()。不知道在哪里可以写它的事件函数,每次我自己定义函数,都通不过编译。高手指点,哭ing !!!

解决方案 »

  1.   

    新建一个工程,拖一个button在窗体上,把下面的代码复制覆盖你原有的单元文件。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure ButtonClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      Button: TButton;
    begin
      Button := TButton.Create(Self);
      Button.Parent := Self;
      Button.Left := 100;
      Button.Top := 100;
      Button.Caption := '点我';
      Button.OnClick := ButtonClick;
    end;procedure TForm1.ButtonClick(Sender: TObject);
    begin
      ShowMessage('我被点击');
    end;end.
      

  2.   

    Dlwxn(蓝天)      你的代码是Button.OnClick := ButtonClick;
         但是如过我自己定义一个函数附给Button.OnClick ,为什么会出现错误啊????这个方法可以,但是我还是想知道上面的问题怎么解决,谢谢
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        //自定义函数声明写在这
        //如function a;
         private
        { Private declarations }
          public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.a();
    begin
      showmessage('aaa');
    end;然后再写Button.OnClick:=a就可以了。
      

  4.   

    注意
    事件类型是TNotifyEvent类型
      TNotifyEvent = procedure(Sender: TObject) of object;
    你的方法必须是对象方法
      

  5.   

    还有一个最最重要的问题,我想得到我自己动态生成的控件的时间参数,所以自己写个函数不行,
     比如 mousemove事件,我要在我自己动态生成的控件的mousemove事件中得到鼠标的坐标,那自己写函数或者把其他空间的事件复制过来也不行啊。请大家指点啊,谢谢
      

  6.   

    就直接自己定义一个procedure,然后保证参数一致,就可以对OnClick直接赋值了。