关闭子窗口是出现错误(50分)

Z

zaochao

Unregistered / Unconfirmed
GUEST, unregistred user!
我在关闭子窗口时出现下列错误:
Access violation at address 004d31e4 in medule ‘project1.exe’. read of address FFFFFFFF.
如果子窗口不最大化就不会出现错误,这是怎么回事??
 
看你怎么关闭的,你是不是关闭了又最大化?
从错误来看,是释放在子窗口,又去操作它。
 
我是最大化后再关闭的,是不是释放后又RESIZE操作呢?应该是释放后就没有别的操作了吧!!
 
你应该在onclose事件中写入
action:=cafree。
这样你就可以关闭了。
 
我已经写了啊!!
ONCLOSE中写ACTION:=CAFREE;
ONCLOSEQUERY中写FORM2:=NIL;
CANCLOSE:=TRUE;
还有其他原因吗?
 
估计你是有的窗体没创建可你 又无意使用了它,有可能
 
你不会关闭(释放)了两回吧
 
如果我不最大化,随便拉窗口大小都没关系,关闭时是不会出错的,关键是一旦最大化了再
关闭就要出错,最大化跟自由拉伸窗口大小有什么区别吗?
注:我在ONRESIZE中写了:
dbgrid1.Top:=80;
dbgrid1.Left:=30;
dbgrid1.Width:=form12.Width-60;
dbgrid1.Height:=form12.Height-140;
dbnavigator1.Left:=dbgrid1.Left;
dbnavigator1.width:=dbgrid1.Width;
dbnavigator1.Top:=(dbgrid1.Top+dbgrid1.Height+5);
 
你的
FORM2:=NIL;
CANCLOSE:=TRUE;
中的FORM2不会就是要关闭的子窗体吧,如果是的话是可能出现问题的
 
把form12写成Self试试,甚至把onclose事件去掉,在外面释放它
 
同Delphing,是肯定要出问题才对:)
你这个要在OnDestroy里面写Form2 := nil;
要知道这些事件执行的顺序才可以
 
shenloqi
我已经在OnDestroy里面写Form2 := nil;
但执行的时候还是出现一样的错误!!
njhmq
你写的我不太明白,可否再解释一下!!
 
写这修个干什么?
Form2 := nil;
把它去掉!
 
也许是在最大化的情况下关闭窗口激发了Resize事件。
你把onResize里面的动作取消,试一下。
一点点试,把事件精简,先找出是那个事件激发了错误,然后再考虑原因。
 
TO 天与地:
把ONRESIZE中的东西拿掉后,关闭是没问题的,但是我肯定需要在ONRESIZE时改变大小的呀,
所以ONRESIZE是不能拿掉的。
TO jsxjd:
拿掉FORM12:NIL后,关闭窗口暂时没问题了,但重新打开窗口时因为系统认为FORM12没有NIL,
所以打开错误了!
现在我已经有点明白出错的问题了,应该是在最大化窗口关闭时触发了RESIZE事件,但在触发RESIZE
前窗口已经FORM12:NIL了,导致RESIZE中调整窗口大小的语句出错,所以现在需要把FORM12:NIL
放在关闭窗口最后一道事件中就可以了,最后一道事件是什么呢?
 
窗体最大化后,在关闭当前窗体时会触发窗体的OnResize事件,此时窗体的Form12等控件
已经释放了,OnResize事件中的Form12此时为nil,引用一定会报非法地址访问,你应该在
Onresize事件中加判断!
 
成功解决问题,感谢大家的参与,由于分不多只能意思意思了,大家谁缺分的话来找我!!
 

Similar threads

顶部