异常时取消 OnLoad
Cancel OnLoad on Exception
我有一个 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
来防止控件可见,并且如果控件的处置是担心你,你可以从 parent 的控制集合中删除它,然后处理它:
Visible = false;
Parent.Controls.Remove(this);
Dispose();
请记住,所有对控件的引用,然后将指向已处置的 object,控件的 IsDisposed
将为真,调用其成员将导致 ObjectDisposedException
.但是对控件的引用不为空。
我有一个 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
来防止控件可见,并且如果控件的处置是担心你,你可以从 parent 的控制集合中删除它,然后处理它:
Visible = false;
Parent.Controls.Remove(this);
Dispose();
请记住,所有对控件的引用,然后将指向已处置的 object,控件的 IsDisposed
将为真,调用其成员将导致 ObjectDisposedException
.但是对控件的引用不为空。