我有一个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;
}
}
}
答案 0 :(得分:2)
实例化由构造函数发生,它不同于OnLoad
,后者在创建控件时发生。您无法阻止在OnLoad
中实例化,为时已晚,但是您可以在构造函数中通过引发异常来实现。
您可以在OnLoad
中进行的操作是通过将控件的Visible
属性设置为false
来防止控件可见,并且如果您担心控件的废弃,则可以从父项的控件集合中删除它,然后进行处理:
Visible = false;
Parent.Controls.Remove(this);
Dispose();
请记住,所有对控件的引用都将指向已处置的对象,并且控件的IsDisposed
为true,调用其成员将得到ObjectDisposedException
。但是对控件的引用不为空。