我用TClientDataSet派生了一个新的构件,但是如果我要重载它的AfterOpen方法时,不能编译,报错,说在基类里没有声明此方法,哪位有好的办法解决这一问题。 我想在我的构件Open后弹出一个消息框。一定给分

解决方案 »

  1.   

    要重载这个方法,AfterOpen在TClientDataSet中必须是定义虚拟的。
    你要想在构件打开弹出一个消息框,可以在这个onAfterOpen事件中弹出一个消息框也行呀。
      

  2.   

    AfterOpen是一个事件,你可以重载DoAfterOpen方法
      

  3.   

    在AfterOpen事件里面写代码
    procedure TForm1.ClientDataSet1AfterOpen(DataSet: TDataSet);
    begin
      ShowMessage('YourMessage');
    end;
      

  4.   

    我看了看TClientDataSet的源代码,发现TClientDataSet的AfterOpen事件是由TDataSet.DoAfterOpen方法触发的,所以你只需要override这个DoAfterOpen过程就行了,我自己随便简单的试了一下,组件注册安装好后调试也没问题,单元代码如下:unit TestClientDataSet;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls,
      Dialogs, ComCtrls, StdCtrls, DB, DBClient;type
      TTestClientDataSet=Class(TClientDataSet)
      private
        //
      protected
        //
      public
        procedure DoAfterOpen; override;  end;  procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples',[TTestClientDataSet]);
    end;{ TTestClientDataSet }procedure TTestClientDataSet.DoAfterOpen;
    begin
      inherited;
      showmessage('ClientDataSet数据集已经打开');
    end;end.
      

  5.   

    谢谢大家,已经解决了,用的是另一个类,把AfterOpen属性公布了,然后再从这个类往下继承就可以了  :)结分了