关于敲击回车程序崩溃的问题

langziwujia007 2008-12-23 04:25:33
我做了个程序,在一个程序中的面板上显示其他窗体,结果在显示出窗体后,敲击回车,程序就崩溃掉了。
部分代码如下:
//将Panel上的所有窗体都关闭并释放
try
for intI:=0 to Pl_Item.ControlCount-1 do
begin
if ((Pl_Item.Controls[intI])is TForm ) then
begin
//如果不是查询窗体,则关闭并释放
if (((Pl_Item.Controls[intI])<>Frm_Query)and((Pl_Item.Controls[intI])<>Frm_StatQuery)) then
begin
((Pl_Item.Controls[intI])as TForm ).Close;
((Pl_Item.Controls[intI])as TForm ).Free;
break;
end;
end;
end;
except
end;
//创建窗体并显示到面板上
Form := Form.Create(Application);
Form.parent:=pl_Item;
Form.BorderStyle:=bsNone;
Form.Align:=alclient;
Frm_ItemInfo.Show;


============
我怀疑是这里的问题,因为不是嵌套窗体都不存在这个问题,请高手帮忙,万分感谢

...全文
174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowei_001 2009-01-08
  • 打赏
  • 举报
回复
自己调试吧,遇到这样的问题最好是像六楼说的那样自己调试,感觉疑点大的地方用F7!
langziwujia007 2009-01-08
  • 打赏
  • 举报
回复
问题没有得到解决,希望大家继续帮忙
木落 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 langziwujia007 的回复:]
运行过去没有到断点就崩溃了,可能是系统的一个错误。我觉得可能是嵌套窗体的问题,因为不嵌套的窗体都没有这个问题

我怀疑是当前窗体没有控件获得焦点的时候,点回车,会像父空间发送这个消息,可能就溢出了。
[/Quote]

那么就F7进行一步一步的跟踪,跟到哪步崩溃了,那么就从这里找问题~
当然不排除全局的问题
delphi2006 2008-12-25
  • 打赏
  • 举报
回复
我以前也用过在 TForm 里显示 TForm 但是问题挺多的,后来改用 TFrame 了,你试试改用 TFrame 吧。
火龙岛主 2008-12-24
  • 打赏
  • 举报
回复
F5设置断点
F9运行
F8单步跟踪,反复F8,找到你要的内容。
langziwujia007 2008-12-24
  • 打赏
  • 举报
回复
感觉以上说的都不是主要问题, if ((Pl_Item.Controls[intI])is TForm ) then 还用检查是否存在吗?
langziwujia007 2008-12-24
  • 打赏
  • 举报
回复
应该为“Form.Show;”对不起了
QQ12236822 2008-12-24
  • 打赏
  • 举报
回复
错了 同意6楼
QQ12236822 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 langziwujia007 的回复:]
感觉以上说的都不是主要问题, if ((Pl_Item.Controls[intI])is TForm ) then 还用检查是否存在吗?
[/Quote]
同意
langziwujia007 2008-12-24
  • 打赏
  • 举报
回复
运行过去没有到断点就崩溃了,可能是系统的一个错误。我觉得可能是嵌套窗体的问题,因为不嵌套的窗体都没有这个问题

我怀疑是当前窗体没有控件获得焦点的时候,点回车,会像父空间发送这个消息,可能就溢出了。
zhao_yong 2008-12-24
  • 打赏
  • 举报
回复
同意6樓,這樣可以看到全體是哪個是方出的問題。這樣看你的代碼是看不出來的。
jerry8 2008-12-23
  • 打赏
  • 举报
回复
((Pl_Item.Controls[intI])as TForm ).Close;
((Pl_Item.Controls[intI])as TForm ).Free;//这里的问题吧
FREE写到form的CLOSE事件
ACTION:=CAFREE

ezhuo 2008-12-23
  • 打赏
  • 举报
回复
可能这两名有问题.
((Pl_Item.Controls[intI])as TForm ).Close;
((Pl_Item.Controls[intI])as TForm ).Free;
做释放操作前先判断该对象是否存在
ezhuo 2008-12-23
  • 打赏
  • 举报
回复
大哥,代码写全吧,Frm_ItemInfo.Show; 是那个对象要show啊

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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