Функция перегрузки VB.NET по умолчанию, когда пользователь нажимает X (закрыть программу) - PullRequest
2 голосов
/ 14 октября 2009

Как мне переопределить функциональность по умолчанию, когда пользователь нажимает X в приложении на основе форм VB.NET?

В настоящее время я обрабатываю событие MyBase.Closing ... но, поскольку это приложение DirectX, мне нужно выполнить некоторую очистку, прежде чем разрешить закрывать форму.

Ответы [ 3 ]

3 голосов
/ 14 октября 2009

Если вы хотите провести дополнительную очистку перед закрытием формы, сделайте это в событии закрытия формы .

Это событие также позволяет отменить закрытие формы через свойство FormClosingEventArgs.Cancel . Свойство события CloseReason сообщит вам, почему было вызвано событие (вы должны проверить CloseReason.UserClosing )

2 голосов
/ 14 октября 2009

Re ваши другие комментарии; делать что-либо за до события было бы преждевременно; в конце концов, какой-то другой код может отменить закрытие, и вы останетесь с заскупленной формой. Лично мне бы хотелось переопределить OnClosed; не большая часть головы VB, но в C #:

    protected override void OnClosing(CancelEventArgs e)
    {
        // check OK to close (save/cancel etc)
        base.OnClosing(e);
    }
    protected override void OnClosed(EventArgs e)
    {
        // your code here
        base.OnClosed(e);
        // or here
    }
1 голос
/ 14 октября 2009

Если вам неудобно помещать свой код в событие Form_Closing, единственный известный мне вариант - это «взлом», который я использовал один или два раза. Не стоит прибегать к этому хаку, но вот оно:


Не используйте обычную кнопку закрытия. Вместо этого создайте свою форму, чтобы она не имела элемента управления. Вы можете сделать это, установив ControlBox = false в форме, и в этом случае у вас все равно будет нормальная полоса в верхней части формы, или вы можете установить FormBorderStyle формы на «Нет». Если вы идете по этому второму маршруту, не будет никакой полосы в верхней части или какой-либо другой видимой границы, поэтому вам придется смоделировать ее, рисуя на форме или используя элементы управления Panel.

Затем вы можете добавить стандартную кнопку и сделать так, чтобы выглядел как кнопка закрытия, и поместите туда свой код очистки. В конце события кнопки просто позвоните this.Close() (C #) или Me.Close() (VB)

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