二次创建窗体时报错如何解决?

xiaoxinghappy 2005-11-07 10:06:31
我的一段代码用来创建和显示窗体,可是,当第一次窗体正常创建和关闭后,第二次创建时经常会报错

inaccesible value

代码是这样的:
if not Assigned(frmOrder) then frmOrder := TfrmOrder.Create(Application);
frmOrder.Show();
frmOrder.WindowState := wsMaximized;

并且在frmOrder的Close 里做了
Action := caFree;
并在frmOrder的Destroy 里做了
frmOrder := nil

在程序开始时的自动创建中已经去掉了的,那么为什么第二次创建时会出错呢?
调试时是
TfrmOrder.Create(Application) 出现上述错误,这个要怎么解决?
...全文
107 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yukr 2005-11-15
  • 打赏
  • 举报
回复
我是这样解决的:在子窗体的FormDestroy事件中添加
Fm_pwd:=nil;
但是,编译过后,新的问题出现了,在不关闭子窗体的前提下,第二次新建同一个子窗体报错,这是什么原因呢?郁闷啊,哪位高手给我解答一下................
smilewalk 2005-11-08
  • 打赏
  • 举报
回复
看出你这是mdi窗体了,去掉frmOrder := nil,因为你已经把对象生命期的管理权交给对象的父亲了,而且好像不需要frmOrder.Show();刚创建必然是显示把我写得给你一些看看:
if assigned(FChargeFrm) then
FreeAndNil(FChargeFrm);
{}
FChargeFrm := TChargeFrm.Create(false);
{注:我的create 重写了,你写成nil就是了}
再说两句,你这个子窗体和主窗体是依赖关系,不要让父亲管理生命期
xiaoxinghappy 2005-11-07
  • 打赏
  • 举报
回复
写在Close 里是一样的啊,我之前也是写在Close 里的,后来写到 Destroy里,都是一样的,你们没有遇到这样的问题吗。
我的这个窗体是一个MDIChlid 窗体,一个MDI窗体中有多个MDIChlid窗体,有时个一个MDIChild 窗体的首次打开也会出这样的错误
lovendII 2005-11-07
  • 打赏
  • 举报
回复
frmOrder := nil也写在close事件中试试,我以前也是这样做的。

子窗体关闭时的代码:
procedure Tfmczview_edt.FormClose(Sender: TObject; var Action: TCloseAction);
begin

MainForm.fmczview_edt:=nil;
Action := caFree;

end;

主窗体打开子窗体的代码
procedure TMainForm.N11Click(Sender: TObject);
begin
if fmczview_edt= nil then
fmczview_edt := Tfmczview_edt.Create(self);
end;

在主窗体的public
fmczview_edt:Tform;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧