如题,在我的程序中当我将一个form的parent属性设为另一个form时,运行时就会发生异常,
报错信息大概是"在模块ntdll.dll发生了Access Violation",但不影响程序的正常运行,因此我就想把它给屏蔽掉,但用了try...except...end却无法捕获,真是郁闷非常,敢问高手这是为何,难道异常还有非常特殊的以致不能捕获???而奇怪的是我在XP上运行就不会出现这个错误,但是在2000 SERVER上就会报错!!!
难道是NTDLL.DLL的缘故???// 其中Self 指代工程主窗体,Pncr为一个面板,这段代码实现动态拼接窗体的功能。
begin
FMSet_Hard:=TFMSet_Hard.Create(nil);
try
FMSet_Hard.Parent:=Self.PnCr; // WIN2000 下出错代码处
except on E:Exception do
end;
FMSet_Hard.BringToFront;
FMSet_Hard.Visible:=True;
FMSet_Hard.Show;
Self..Caption:=MyCaption+' ['+FMSet_Hard.Caption+']';
end; 如上面所示,在TRY...EXCEPT...END想把异常给去掉
报错是NTDLL.DLL访问非法。
报错信息大概是"在模块ntdll.dll发生了Access Violation",但不影响程序的正常运行,因此我就想把它给屏蔽掉,但用了try...except...end却无法捕获,真是郁闷非常,敢问高手这是为何,难道异常还有非常特殊的以致不能捕获???而奇怪的是我在XP上运行就不会出现这个错误,但是在2000 SERVER上就会报错!!!
难道是NTDLL.DLL的缘故???// 其中Self 指代工程主窗体,Pncr为一个面板,这段代码实现动态拼接窗体的功能。
begin
FMSet_Hard:=TFMSet_Hard.Create(nil);
try
FMSet_Hard.Parent:=Self.PnCr; // WIN2000 下出错代码处
except on E:Exception do
end;
FMSet_Hard.BringToFront;
FMSet_Hard.Visible:=True;
FMSet_Hard.Show;
Self..Caption:=MyCaption+' ['+FMSet_Hard.Caption+']';
end; 如上面所示,在TRY...EXCEPT...END想把异常给去掉
报错是NTDLL.DLL访问非法。
FMSet_Hard:=TFMSet_Hard.Create(nil);
try
FMSet_Hard.Parent:=Self.PnCr; // WIN2000 下出错代码处
except on E:Exception do
Showmessage(e.Message);
end;
FMSet_Hard.BringToFront;
FMSet_Hard.Visible:=True;
FMSet_Hard.Show;
Self..Caption:=MyCaption+' ['+FMSet_Hard.Caption+']';
end;
把Exception Type to Ignore去掉试试
FMSet_Hard.Parent:=Self.PnCr;
一个窗体的Parent怎么能是一个面板呢,你自己想想。
把窗体的对齐方式设置为alLeft就行
end;
这里没做任何处理啊。调试下可以看到异常,只不过是编译器提示的异常,不是捕获的
其实Form跟Panel可以说是远房亲戚,最早交合的祖先类是TwinControl, 所以,彼此的从属是没有问题的,
如果这个不能理解,在后面的面向多态性的编程你可能会进入误区!