在异常时取消OnLoad

问题描述 投票:1回答:1

我有一个UserControl覆盖OnLoad。如果发生异常,我想不实例化UserControl。我该怎么做呢?

public partial class MyView : System.Windows.Forms.UserControl
{
    protected override void OnLoad(System.EventArgs e)
    {
        try
        {
            this._presenter.OnViewReady();
            base.OnLoad(e);
            InitializeViewComponents();
        }
        catch (Exception exception)
        {
            System.Windows.Forms.MessageBox.Show(exception.Message, 
                "Error Loading Project", 
                System.Windows.Forms.MessageBoxButtons.OK,
                System.Windows.Forms.MessageBoxIcon.Error);

            -- stop load here --
            //throw;
        }
    }
}
c# .net winforms exception-handling user-controls
1个回答
2
投票

实例化由构造函数发生,它与控件创建时发生的OnLoad不同。你无法阻止OnLoad中的实例化,但为时已晚,但是你可以通过抛出异常在构造函数中做。

您在OnLoad中可以做的是通过将Visible属性设置为false来防止控件可见,并且如果控件的处理对您来说是一个问题,您可以将其从父控件集合中删除然后处置它:

Visible = false;
Parent.Controls.Remove(this);
Dispose();

请记住,所有对控件的引用,然后将指向一个已处置的对象,控件的IsDisposed将为true,并且调用其成员将导致ObjectDisposedException。但是对控件的引用不是空的。

© www.soinside.com 2019 - 2024. All rights reserved.