我的程序是用的MDI框架的。当我点击主菜单的"部门设置"时候,第一次弹出设置窗口,没有提示错误,但当我再次点击该菜单时候,就提示了Abstract error错误。部门设置窗口为MDI子窗口,该菜单的click事件代码是这样的:procedure Tfrm_main.N29Click(Sender: TObject);
begin
  if not Assigned(Frm_department) then
     frm_department:=Tfrm_department.Create(nil);
     frm_department.Show;
end;有什么错误没有?请高手帮下忙..?

解决方案 »

  1.   

    哦,我再补充下。
    我将代码重新修改了下,添加异常处理。
    procedure Tfrm_main.N29Click(Sender: TObject);
    begin
      //if not Assigned(Frm_department) then
        // frm_department:=Tfrm_department.Create(nil);
       try
          if not assigned(Frm_department) then
          begin
            Frm_department:=TFrm_department.Create(application);//先创建子窗体,再显示
            Frm_department.Show ;
          end;
       except
         Frm_department.free;
         Frm_department:=nil;
       end;
    end;虽然是这样子,也还是当第二次点击菜单时候,错误提示依旧。由此,我自己推想可能是关闭事件中出现了问题。
    在“部门设置”窗口的“退出”的click事件中,我修改为:
    procedure Tfrm_SalarySet.Bt_exitClick(Sender: TObject);
    begin
       frm_salaryset.close;
       frm_salaryset:=nil;
    end;
    //添加了最后的释放语句然后,只要你每次是点“退出”来关闭当前窗口,则再次打开再关闭,如此反复是没有问题的!但是,当我使用窗口右上的关闭按钮来关闭该窗口,再点击菜单,则不弹出“部门设置”窗口,也不提示那个错误信息了??
    已知在“部门设置”窗口的“onclose”事件代码如下:
    procedure Tfrm_SalarySet.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
         Action:=Cafree;
         frm_salaryset:=nil;
    end;什么原因?????
      

  2.   

    试了你的代码,没问题。你的mdi子窗口是继承自己的窗口类的吗?在创建的时候的代码有没有问题?