Переопределите стандартную близкую кнопку (X) в Windows Form

Ну, я начал использовать Emacs в колледже, и мне только 30 лет, таким образом, я думаю, что рассчитываю как часть "Любящего Eclipse поколения".

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

72
задан Alex S 3 November 2009 в 18:37
поделиться

5 ответов

Для этого вы можете переопределить OnFormClosing . Только будьте осторожны, вы не сделаете ничего слишком неожиданного, так как щелчок «X» для закрытия - это хорошо понятное поведение.

protected override void OnFormClosing(FormClosingEventArgs e)
{
    base.OnFormClosing(e);

    if (e.CloseReason == CloseReason.WindowsShutDown) return;

    // Confirm user wants to close
    switch (MessageBox.Show(this, "Are you sure you want to close?", "Closing", MessageBoxButtons.YesNo))
    {
    case DialogResult.No:
        e.Cancel = true;
        break;
    default:
        break;
    }        
}
129
ответ дан 24 November 2019 в 12:31
поделиться

Переопределить метод OnFormClosing .

ВНИМАНИЕ: Вам необходимо проверить CloseReason и изменить поведение только в том случае, если это UserClosing. Вы не должны помещать сюда ничего, что могло бы остановить процедуру завершения работы Windows.

Изменения в завершении работы приложений в Windows Vista

Это из требований программы логотипа Windows 7 .

19
ответ дан 24 November 2019 в 12:31
поделиться

Отмените OnFormClosing или зарегистрируйтесь для события FormClosing .

Это пример переопределения функции OnFormClosing в производной форме:

protected override void OnFormClosing(FormClosingEventArgs e)
{
   e.Cancel = true;
}

Это пример обработчика события, останавливающего закрытие формы, которое может быть в любом классе:

private void FormClosing(object sender,FormClosingEventArgs e)
{  
   e.Cancel = true;
}

Для более продвинутых проверьте свойство CloseReason в FormClosingEventArgs, чтобы убедиться, что выполняется соответствующее действие. Возможно, вы захотите выполнить альтернативное действие только в том случае, если пользователь пытается закрыть форму.

10
ответ дан 24 November 2019 в 12:31
поделиться

Переопределить OnFormClosing ?

3
ответ дан 24 November 2019 в 12:31
поделиться

Это довольно часто задаваемый вопрос. Вот один хороший ответ:

Функциональность по умолчанию для перегрузки VB.NET, когда пользователь щелкает X (Закрыть программу)


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


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

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

1
ответ дан 24 November 2019 в 12:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: