由于需要许多具有相同功能的Form,就做了一个模版,里面有增加删除关闭等按钮!有3个问题:
1.是不是这个模版(父)窗口(BasicForm)必须在本程序中,我觉得好像如果主程序不包含这个
父窗口,那它的子窗口打开就会报错!
2.比如关闭按钮,该怎么写!要是写BasicForm.Close;的话,子窗口的关闭不起作用,该如何继承,是不是写当前窗口.close,当前窗口如何表达!
3,其他的增加删除的复杂功能能不能继承,使用dbedit,对不同的表操作!
不想写太多重复的代码?仅仅是操作对象不同!

解决方案 »

  1.   

    1 父类必须要在程序里(可以建立一个unit放它).父类可以没用实例.
    2 关闭 窗口名.close 或 self.close;
    3 改写父类,将方法放到 protected,在子类里将需要的public.
     
      

  2.   

    谢楼上的!
    3.能不能详细点,不太明白,
    我是这样想的:操作都用一个表名比如:ATable
    事先把它定义成ATable : ADOTable;
    在子类里面ATable:=StudentTable;
    StudentTable是已经存在的表也就是但前需要操作的对象。
      

  3.   

    我试了下对于
    2:用Self.close;可以但点之后不会出现提示框,要自己输CLOSE;不知道为什么?
    用Basicform.close;的话子类点击按钮后出错!
      

  4.   

    2 不可以是 basicForm  是你的子类的窗体名(如 oneform),如果是在子类的作用域中关闭直接close即可.
    3 不太懂你的意思,你是不是要定义一个方法对任意的表都能进行某类操作.如果是的话.
    type
      TbasicForm = class(TForm)
      private
        { Private declarations }
        FTable: AdoTable;
      protected   //在此域内的成员只对子类是可见的
        property ATable:AdoTable read FTable write FTable ;//定义属性
        procedure DelTable;virtual;//定义一个虚方法,将一些对所有的表都需要的代码加入;
      public
        { Public declarations }
      end;
    type
     TOneForm=class(TbasicForm )
     public
       property Atable;//提升属性的可见度;
       procedure DelTable;override;//覆盖方法,加入针对子类的代码;
    end;implementation{$R *.dfm}
    { TbasicForm }procedure TbasicForm.DelTable;
    begin
    .....
    .....//在这可对ATabel 进行操作.
    end;{ TOneForm }procedure TOneForm.DelTable;
    begin
      inherited;
      ....
    end;其他的增加删除的复杂功能能不能继承,?
     有这样的问题说明你的类的结构有了问题,有一个准则就是父类一定不要比子类复杂.
    虽然把方法放到 protected 中 可以使得子类能有选择的发布方法,但如果有大量的方法是
    不要继承的.你就应该对父类的结构重新定义.