如果每个子窗体的 SaveData 过程所做的事情是一样的话,那在基窗体的 OnClose 或者 OnCloseQuery事件
中调用它就行了。

解决方案 »

  1.   

    方法一:
    将保存按扭放在父窗体中,然后父窗体中放入DataSouce控件,主细表和单表需单独定义父窗体,以下是主细表父窗体的Click's code:
      if MessageBox(self.handle,'请确认是否保存该单据的修改?','请确认',mb_yesno+mb_iconwarning)=id_no then
        abort;
      DM.Database1.StartTransaction ;
      try
        if datasource1.DataSet.State in [dsedit,dsinsert] then
          datasource1.DataSet.Post ;
        ttable(datasource2.DataSet).applyupdates;
        dmdb1.Database1.Commit ;
        ttable(datasource2.DataSet).commitupdates;
      except
        showmessage('保存失败!');
        dmdb1.Database1.Rollback ;
        datasource1.Edit ;
        abort;
      end;
    方法二:
    定义全局函数SaveDate(t_master,t_detail:tTable;D:tDatabase):boolean;
      

  2.   

    你在基窗体中写好savedata代码及执行它的事件之后,每个继承它的子窗体都自动有该功能呀。
      

  3.   

    首先谢谢大家的热情!!
    也许我说的不够清楚。我的意思是:每个子窗体的SaveData执行的操作不同,当操作员单击主菜单时,Menu Click中的代码应能根据当前活动的MDIChildFrm的信息自动执行此《活动窗体》的SaveData
      

  4.   

    这也是一样的,当前激活的子窗体是唯一的,你调用ActiveMDIChild.savedata,不是一样的吗?
      

  5.   

    解决以下这句代码存在的问题,我的问题就解决了.
      if Application.MainForm.MDIChildCount>0 then
        (Application.MainForm.ActiveMDIChild as Application.MainForm.ActiveMDIChild.ClassParent).SaveData;