我在delphi中创建了MDI窗口程序,想在菜单中打开子窗口,但我在菜单项中用:if Frmsmssendtable=nil then
  Frmsmssendtable:=TFrmsmssendtable.Create(Frmsmssendtable);Frmsmssendtable.Show;第一次打开就可以,第二次就出错了,提示说:Frmsmssendtable不是nil.我该怎么办???

解决方案 »

  1.   

    你要在fFrmsmssendtable的close事件中释放窗体
      

  2.   

    // 可能是你的Frmsmssendtable在关闭时没有释放;
    // 在Frmsmssendtable的OnClose事件里面写上;
    Action := caFree;
      

  3.   

    我在close事件中有:
    Action := caFree;这样不可以释放窗体吗?
    还需要别的吗?
      

  4.   

    在form2中(form2为MDI窗体)
    procedure TForm2.ssss1Click(Sender: TObject);
    var
       form1:tform1;
    begin
      form1:=tform1.Create(self);
     with form1 do
     begin
        form1.show;
     end;
    end;在form1中(form1为子窗体)procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree ;end;
      

  5.   

    但还是不可以耶,提示:
    Class EAbstractError with message 'Abstract Error'
      

  6.   

    To: hzyood(静候佳音) 
    你的这种方法很好,谢谢,不过
    当我打开form1,不关闭它时,再打开时,会打开两个form1,我觉得这样不是好,
    有什么办法只见程序只打开一个窗口吗?
      

  7.   

    action:=cafree;
    form1:=nil;
    试试
      

  8.   

    procedure Tmain.N1Click(Sender: TObject);
    begin
      if not FindChildWindow('TFrmsmssendtable') then
      Application.CreateForm(TFrmsmssendtable, Frmsmssendtable);
    end;
    FindChildWindow('TFrmsmssendtable')  
    这个函数是根据它的参数名字,即某个窗口的名字去判断它是否已经
    被打开存在,如果不存在则创建,存在就BringToFront。