如题,在我的程序中当我将一个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访问非法。

解决方案 »

  1.   

    begin
        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;
      

  2.   

    调试状态下,delphi环境在缺省设置下是看不到异常的,你可以单独运行执行程序,这样你就可以看到了
      

  3.   

    看看菜单上的Tools -> Debugger Option -> Language Exceptions
    把Exception Type to Ignore去掉试试
      

  4.   

    这样是不正确的
       FMSet_Hard.Parent:=Self.PnCr;  
    一个窗体的Parent怎么能是一个面板呢,你自己想想。
      

  5.   

    调试状态下,delphi环境在缺省设置下是看不到异常的,你可以单独运行执行程序,这样你就可以看到了
      

  6.   

    一个窗体的Parent可以是一个面板的
    把窗体的对齐方式设置为alLeft就行
      

  7.   

    except on E:Exception do
        end;
    这里没做任何处理啊。调试下可以看到异常,只不过是编译器提示的异常,不是捕获的
      

  8.   

    对于Blakhawk(黑鹰) 的意见,我觉得你还没搞清楚面向对象的编程原理,以及控件的继承关系! 
    其实Form跟Panel可以说是远房亲戚,最早交合的祖先类是TwinControl, 所以,彼此的从属是没有问题的,
    如果这个不能理解,在后面的面向多态性的编程你可能会进入误区!