Отмена загрузки при исключении - PullRequest
0 голосов
/ 01 марта 2019

У меня есть 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;
        }
    }
}

1 Ответ

0 голосов
/ 01 марта 2019

Инстанцирование происходит конструктором, и оно отличается от OnLoad, которое происходит, когда создается элемент управления.Вы не можете предотвратить создание экземпляров в OnLoad, это слишком поздно, однако вы можете сделать это в конструкторе, вызвав исключение.

То, что вы можете сделать в OnLoad, это предотвратить отображение элемента управления, установив его Visible свойство false, а также, если для вас важна утилизация элемента управления, вы можете удалить его из коллекции родительского элемента управления и затем утилизировать его:

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

Помните, что все ссылки наcontrol, затем будет указывать на удаленный объект, и IsDisposed элемента управления будет истинным, и вызов его членов приведет к ObjectDisposedException.Но ссылки на элемент управления не являются нулевыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...