【发布时间】:2015-05-07 03:32:25
【问题描述】:
我最近从 XE4 升级到 XE8,在将 itemindex 分配给无线电组时遇到了访问冲突。我很好奇为什么在 XE4 中这行得通,而在 XE8 中却不行。当主程序启动时,所有的表格都已经创建好了。此代码在调试时运行良好,但在独立运行时会引发异常。
with TravelBookingForm do begin
try
rg1.itemindex:=tag-1;//not sure which causes the access violation
except
on E : Exception do
begin
showMessage(E.Message); //access violation message is shown
end;
rg1.tag := 0;
end;
end;
注意:我省略了不相关的代码
【问题讨论】:
-
去掉with语句,然后调试。确认 TravelBookingForm nil 和 rg1 nil - 虽然如果 TravelBookingForm 是 rg1 的父级,我猜 TravelBookingForm 尚未创建
-
如果您不确定 AV 是来自
ItemIndex分配还是来自Tag阅读,请将它们拆分为单独的语句。将Tag读入一个局部变量,然后将其分配给ItemIndex。 -
在项目源码中我们有:Application.CreateForm(TTravelBookingForm, TravelBookingForm);所以我认为它正在被创建
-
如果你在 with 语句上放置一个断点并检查,你会知道(或不知道)它正在被创建。它会消除猜测的工作
-
所以经过更多测试后,我可以确认 rg1 不是 nil 并且它是导致访问冲突的项目
标签: forms delphi access-violation delphi-xe8