不能多次Free
if treeview1.Selected.text='人事完整资料' then
begin
      if frm_archives := nil then 
        frm_archives:=tfrm_archives.Create(Application);
      frm_archives.Show;
end;

解决方案 »

  1.   

    在子窗体释放前检查这个窗体是否已经被释放
    if not (frm_archives=nil) then  begin
      frm_archives.free;
      frm_archives:=nil;
    end;
    不过你的写法很奇怪,条件不符合,就关闭子窗体,自然返回父窗口了,有点没明白。错误提示肯定是操作了非法指针,比如说释放一个已经为NIL的窗体。
      

  2.   

    呵呵,你要用一个变量来保存老窗口,在建新窗口时删除老窗口.
    可如下:
    在主窗体的Private部分加入:
     m_OldForm: TForm;在TreeView1的Click事件中加入:if m_OldForm <> nil then FreeAndNil(m_OldForm);
    if TreeView1.Selected.Text = '人事完整资料' then
    begin
      m_OldForm := Tfrm_archives.Create(Nil);
      m_OldForm.Show;  //此行也可省略,MDI子窗体建立后就会自动显示
    end;在主窗体的OnClose中加入
    if m_OldForm<>nil then FreeAndNil(m_OldForm);
      

  3.   

    SQL79(宝兰迷) 
    您好,谢谢你的回答,当条件合适时您写的可以调用子窗口,但条件不符合时如何调用父窗口啊。
      

  4.   

    weizhi(行者):您好!
    谢谢你了,你写的很好,但是不能调用子窗口,也不报错,可以是新老一起删了吧,请大侠在指点
      

  5.   

    呵呵,应该不会一起删吧,
    主窗体建立时, m_OldForm为nil,每一次单击时没有老窗口被删除,当你单击'人事完整资料'后,程序建立并显示了Tfrm_Archives窗体,如果你没点其它节点,不会删除此窗体,除非主程序关闭,如果你点其它窗体,会先删除Tfrm_Archives窗体,然后就剩主窗体了呀,主窗体是不会被删除的.如果其它节点有其它窗体要显示,可在If语句下面再写其它的IF语句呀
      

  6.   

    还有,WEIZHI大侠,FreeAndNil是什么意思啊
      

  7.   

    应该不会一起删除吧
    主窗体建立时,m_OldForm=nil,第一次单击不会有窗体被删除,如果此时单击是的'人事完整资料' 则会建立相应窗体,并显示第二次单击时,如果第一次时建立了窗体则先删除之,然后就剩主窗体了呀如果你还有其它窗体要建,可以if语句下面再写if语句,如下,应该不会有问题呀!
    if m_OldForm <> nil then FreeAndNil(m_OldForm);
    if TreeView1.Selected.Text = '人事完整资料' then
    begin
      m_OldForm := Tfrm_archives.Create(Nil);
      m_OldForm.Show;  //此行也可省略,MDI子窗体建立后就会自动显示
    end else  if TreeView1.Selected.Text = 'XXXXXXXX' then
    begin
      m_OldForm := Tfrm_XXXXXX.Create(Nil);
      m_OldForm.Show;  //此行也可省略,MDI子窗体建立后就会自动显示
    end else if ............
      

  8.   

    SQL79(宝兰迷):您好,但调用了子窗口时,父窗口上就是子窗口啊。如果在点击其它的子节点呢?哪就要调用父窗口本身啊。
    对不起,大侠,可能是我说的不够清楚啊。请您再点化我吧
      

  9.   

    FreeAndNil()是个Delphi的一个库函数,它用来将对象指针指向的对象删除,同时将对象指针置为Nil . 如:FreeAndNil(m_OldForm)相当于 
    m_Oldform.Free; 
    m_OldForm := Nil;
      

  10.   

    weizhi(行者):您好,真是辛苦您了大侠。我简直高兴晕了
    还有SQL79(宝兰迷),你也辛苦了。还有‘感觉一下’您好,是我没写清楚,让您也受累了。因为让你迷惑了,是我不好。对不起了。
    真想和你们交个朋友。如果大家不忙,经常能在线聊聊哪真是太好了
    我的QQ是:47292664
    谢谢各位了。