请问要在动态创建的FORM的onshow事件中添加代码应该怎么做呢
procedure Fo(Sender: TObject);
begin
showmessage('啊啊啊啊')
endf:=tform.create(f);
f.Onshow:=Fo;//到这里出错    如果设置为form1.onshow 编辑不会出错 但是运行就会报错
f.Show;
错误代码[DCC Error] fun.pas(41): E2009 Incompatible types: 'method pointer and regular procedure'高手帮帮忙

解决方案 »

  1.   

    Fo要定义在类里面: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 Fo(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure  TForm1.Fo(Sender: TObject);
    begin
    showmessage('啊啊啊啊') ;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      f:tform;
    begin
    f:=tform.create(f);
    f.Onshow:=Fo;//到这里出错    如果设置为form1.onshow 编辑不会出错 但是运行就会报错
    f.Show;end;end.
      

  2.   

    property OnShow: TNotifyEvent;
    TNotifyEvent = procedure (Sender: TObject) of object;
    必须是类的方法。
      

  3.   

    错误提示很清楚了:E2009类型不匹配:"方法指针与常规过程";
    1楼的Keiy所写的方法在类里面定义,那么这个方法就是类的一个方法了,过程名称FO也就是一个方法指针了;3楼兄弟直接声明一个方法指针类型,这就更没有问题了.不过在访问之前,要使方法指针指向你的自定义方法才行.type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
         procedure Test(Sender:TObject);
      public
        { Public declarations }  end;var
      Form1: TForm1;
      DoOnShow:TNotifyEvent;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
     //方式1
      DoOnShow:=Test;
      self.OnShow:= DoOnShow;
     //方式2
     //self.OnShow:=self.Test;
    end;procedure TForm1.Test(Sender: TObject);
    begin
      showmessage('test');
    end;上面的方式1/方式2都可以.
    注意一点就是keiy所说的:自定义事件响应方法必须定义在类内,private,public都可以.
      

  4.   

    var
      f:tform;
    begin
    f:=tform.create(self);//这里弄成SELF就可以了.哪么麻烦
    f.Onshow:=Fo
    f.Show;
      

  5.   

    类事件必须是一个对象方法,可以持TNotifyEvent的声明就知道了!
      

  6.   

    类事件必须是一个对象方法,可以持TNotifyEvent的声明就知道了!