我有一个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;
}
}
}
实例化由构造函数发生,它与控件创建时发生的OnLoad
不同。你无法阻止OnLoad
中的实例化,但为时已晚,但是你可以通过抛出异常在构造函数中做。
您在OnLoad
中可以做的是通过将Visible
属性设置为false
来防止控件可见,并且如果控件的处理对您来说是一个问题,您可以将其从父控件集合中删除然后处置它:
Visible = false;
Parent.Controls.Remove(this);
Dispose();
请记住,所有对控件的引用,然后将指向一个已处置的对象,控件的IsDisposed
将为true,并且调用其成员将导致ObjectDisposedException
。但是对控件的引用不是空的。