unit mydbnavintfaceuses Variants, Windows, SysUtils, Messages, Controls, Forms, Classes,Graphics, Menus, StdCtrls, ExtCtrls, Mask, Buttons, ComCtrls, DB;type  tmydbnav = class(tdbnavigator);
  private
    ...
  protected  ....
  procedure editingchanged;//这个在tdbnavigator已经存在,我希望在这个方法增加一些功能  .....implementationprocedure tmydbnav.editingchanged;
begin
tnavigator.editingchanged;//编译时提示:'未定义的标识'....end;end.
editingchanged是受保护的静态方法,有什么方法能在这个派生类中的相同方法引用呢,我记得书上说这样子是可行的.请高手不吝赐教!

解决方案 »

  1.   

    ta = class
      protected
        procedure a;
      end;  tb = class(ta)
      public
        procedure a;
      end;
    { ta }procedure ta.a;
    begin
      messagebox(0, 'ta.a', nil, 0);
    end;{ tb }procedure tb.a;
    begin
      inherited a;
      messagebox(0, 'tb.a', nil, 0);
    end;
      with tb.Create do
      try
        a;
      finally
        Free;
      end;
      

  2.   

    procedure tmydbnav.editingchanged;
    begin
      //tnavigator.editingchanged;//编译时提示:'未定义的标识'
      inhertied editingchanged;
      

  3.   

    查看一下基类的editingchanged是否是虚过程或者动态过程,如果是,派生类procedure editingchanged; override;就行了
      

  4.   

    唉,基类的editingchanged是个静态方法,我也没办法,唯一的方法是把dbctrls这个系统自带的pas修改后再装上.不知TDBNavigator这个控件对网络数据处理的能力如何,毕竟它的包装还是比较严密的.目前的问题就是我希望添加一些权限控制.设置按钮是否能执行最底层的方法就是editingchanged,如果能解决这个问题,这个控件基本就可以用了.如果没有别的方法,我只有两条路:重新写一个dbnavigator,第二,把所有能控制按钮状态的方法在子类中全部写一遍,让它们都执行子类的editingchanged