你操作dbgrid的代码是写在基类里吗?

解决方案 »

  1.   

    你是否可以考虑,在主类中把Popopmenu的事件定义为虚拟抽象的,不去实现他,在有需要的
    之类中,在去实现对Dbgrid的操作。
      

  2.   

    //基类
    ...
    type
      TBaseFrm = class(TForm)
        MainPop: TPopupMenu;
        New1: TMenuItem;//MainPop的菜单项
        procedure New1Click(Sender: TObject); virtual;//New1的Click事件为virtual
    ...
       procedure TBaseFrm.New1Click(Sender: TObject);
       begin
        Showmessage('New In BaseClass');
       end;
    //子类
    type
      TInheritFrm1 = class(TBaseFrm)
    ...
        procedure New1Click(Sender: TObject); override;//重载主类的New1Click事件 
    ...
        procedure TInheritFrm1.New1Click(Sender: TObject);
        begin
          ShowMessage('New In Inherited');
        end;  
      

  3.   

    或者你如专对DBGrid操作也可这样
    //基类
    ...
    type
      TBaseFrm = class(TForm)
        MainPop: TPopupMenu;
        New1: TMenuItem;//MainPop的菜单项
        procedure New1Click(Sender: TObject); 
       protected 
        function ActiveDBGrid: TDBGrid; virtual; 
      end;  function TBaseFrm.ActiveDBGrid: TDBGrid; virtual;  
      begin
        Result := nil;
      end;
      procedure TBaseFrm.New1Click(Sender: TObject);
      begin
        if Assigned(ActiveDBGrid) then 
             //操作DBGrid;
      end;//子类
    type
      TInheritFrm1 = class(TBaseFrm)
         DBGrid1: TDBGrid;
       protected
         function ActiveDBGrid: TDBGrid; override;
      end;     function TInheritFrm1.ActiveDBGrid: TDBGrid;
        begin
          Result := DBGrid1;
        end;  
      

  4.   

    xzgyb(老达摩)果然是比我高,作delphi多久?
      

  5.   

    呵呵,Doomguard抬举我了,用delphi从今年四月份开始用
      

  6.   

    ohh,比我早,今年八月,八月桂花香哪!
      

  7.   

    这样的话,我要如何在基类的菜单项中引用dbgrid的dataset并对其操作。
      

  8.   

    呵呵
    不谢
    那就ActiveDBGrid.DataSource.DataSet
      

  9.   

    你真好,我真差劲,还是有问题要请教:if Assigned(ActiveDBGrid) then 出错,Variable required ?
      

  10.   

    Assigned(@ActiveDBGrid)试试
     
      

  11.   

    不好意思,是我弄错了,这样写算了
    if ActiveDBGrid <> nil then