我想不写控件,只在调用单元中,重载一个类(控件)的一处方法,如何处理。如我在MDI中放了一个TreeView控件,而TreeView.SaveToFile与LoadFromFile 无法满足我的要求,我可否直接在MDI单元中直接重载这两个方法,如果可以,如何做,望各大侠指点。

解决方案 »

  1.   

    如果你是在MDI窗体级实现你需要的功能,这就不是重载了.而是基于MDI窗体类来实现一个方法了.与TreeView控件本身不存在什么关联了吧.
      

  2.   

    哦,我不明白一楼的观点,楼主不是说是TreeView控件的那两个方法满足不了你的需求吗,很简单啊,自己在单元里面定义个新类,如下:
    TMyTreeView=class(TTreeView)
      public
        procedure LoadFromFile(const FileName: string);reintroduce;
        procedure SaveToFile(const FileName: string);reintroduce;
    end;
    ....
    procedure TMyTreeView.LoadFromFile(const FileName:String);
    begin
      //实现你的功能
    end;
    ....
    procedure TMyTreeView.SaveToFile(const FileName:String);
    begin
      //实现你的功能
    end;
    ....由于这里无法继承,所以可以将TCustomTreeView中的对应方法代码进行修改!
      

  3.   

    procedure TMyTreeView.LoadFromFile(const FileName:String);
    begin
      Inherited;   //两个方法这里都要加,虽然是重新引入,但加这个句子还是可以继续继承!
      //实现你的功能
    end;
      

  4.   

    或者直接覆盖Override也可以!
      

  5.   

    同意FrameSniper(§绕瀑游龙§) 和menliwxj(有缘) 
      

  6.   

    学习reintroduce;是什么?今天才看到。
      

  7.   

    FrameSniper(§绕瀑游龙§) 的方法对阿
      

  8.   

    简单的换个方法名就OK了
    例如LoadFormDataFile等的
      

  9.   

    menliwxj(有缘) 的意思我想是说在窗体类中实现这两个方法,像这样:
    TMainForm = class(TForm)
      ...
      TreeView: TTreeView;
    public
      procedure SaveToFile;
      procedure LoadFromFile;
    end;
      

  10.   

    当然可以了,只是调用的方法不同而已。象你上面写的调用应该是
    MainForm.SaveTiFile和MainForm.LoadFromFile,其中MainForm是TMainForm的实例,如果在当前窗口中调用可以省略。
    如果重载TreeView的SaveToFile则要这样调用:TreeView.SaveToFile,TreeView是你自己编写的那个类的实例两种方法各有好处,对TreeView的重载可以一劳永逸,代码的封装和重用性都很好;你的方法容易实现,不用自己编写控件