不能多次Free
if treeview1.Selected.text='人事完整资料' then
begin
if frm_archives := nil then
frm_archives:=tfrm_archives.Create(Application);
frm_archives.Show;
end;
if treeview1.Selected.text='人事完整资料' then
begin
if frm_archives := nil then
frm_archives:=tfrm_archives.Create(Application);
frm_archives.Show;
end;
if not (frm_archives=nil) then begin
frm_archives.free;
frm_archives:=nil;
end;
不过你的写法很奇怪,条件不符合,就关闭子窗体,自然返回父窗口了,有点没明白。错误提示肯定是操作了非法指针,比如说释放一个已经为NIL的窗体。
可如下:
在主窗体的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);
您好,谢谢你的回答,当条件合适时您写的可以调用子窗口,但条件不符合时如何调用父窗口啊。
谢谢你了,你写的很好,但是不能调用子窗口,也不报错,可以是新老一起删了吧,请大侠在指点
主窗体建立时, m_OldForm为nil,每一次单击时没有老窗口被删除,当你单击'人事完整资料'后,程序建立并显示了Tfrm_Archives窗体,如果你没点其它节点,不会删除此窗体,除非主程序关闭,如果你点其它窗体,会先删除Tfrm_Archives窗体,然后就剩主窗体了呀,主窗体是不会被删除的.如果其它节点有其它窗体要显示,可在If语句下面再写其它的IF语句呀
主窗体建立时,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 ............
对不起,大侠,可能是我说的不够清楚啊。请您再点化我吧
m_Oldform.Free;
m_OldForm := Nil;
还有SQL79(宝兰迷),你也辛苦了。还有‘感觉一下’您好,是我没写清楚,让您也受累了。因为让你迷惑了,是我不好。对不起了。
真想和你们交个朋友。如果大家不忙,经常能在线聊聊哪真是太好了
我的QQ是:47292664
谢谢各位了。