代码之家  ›  专栏  ›  技术社区  ›  yonojoy

未引发FormCreate上的异常

  •  1
  • yonojoy  · 技术社区  · 4 年前

    默认情况下,中发生的任何未处理的异常 TForm.OnCreate 将导致显示错误消息,而不是引发异常。

    原因是中的此代码 VCL.Forms :

    function TCustomForm.HandleCreateException: Boolean;
    begin
        Application.HandleException(Self);
        Result := True;
    end;
    

    我的所有表单都继承自TMyForm。我计划覆盖此功能以解决问题:

    function TMyForm.HandleCreateException: Boolean;
    begin
        Result := False;
    end;
    

    但我无法想象有人希望表单创建中的异常被吞噬,留下一个可能半初始化的表单,但这段代码仍然存在于VCL中。这给我留下了一个问题:

    是否有理由不以这种方式处理表单创建中未处理的异常?或者有更好的选择来处理我的问题吗?


    已编辑 以澄清最初的问题。我有以下代码:

    try
        //...
        Frm := TBooForm.Create(...);
        Frm.ShowModal;
        //...
    except
        //exception in TBooForm.FormCreate not landing here.
    end;
    

    如果我不接触全局异常处理,则中的未处理异常 TBooForm.FormCreate() 不会降落在例外区块中。相反 Frm 将以半初始化状态显示,导致难以跟踪的错误。

    0 回复  |  直到 4 年前
    推荐文章