У меня есть WinForm, который я хочу минимизировать, когда "x" в правом верхнем углу нажат. Для выполнения этого я имею:
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
WindowState = FormWindowState.Minimized;
}
Это - все хорошо и хороший, но теперь у меня есть контекстное меню, которое имеет опцию закрыть WinForm, но из-за кода выше, это просто минимизирует окно.
Как я могу заставить все прокладывать себе путь, я хочу это к?
Попросите обработчика события щелчка установить флаг bool
, который используется в обработчике события FormClosing
.
Урезанный образец кода:
public class YourForm : Form
{
private bool _reallyClose;
private void ContextMenuClick(object sender, EventArgs e)
{
_reallyClose = true;
this.Close();
}
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if (!_reallyClose)
{
e.Cancel = true;
WindowState = FormWindowState.Minimized;
}
}
}
Вам необходимо установить флажок при нажатии на меню «Закрыть».
Затем вы можете проверить наличие флага в FormClosing
и ничего не делать.
И X, и системное контекстное меню отправляют одно и то же сообщение Windows, не думайте, что вы можете легко разделить действие. Это также сообщение Alt + F4.
Я бы также сказал, что мне бы не понравилось это нестандартное поведение, если я нажму X, я хочу, чтобы он был закрыт, а не свернут, для этого предназначена кнопка 2 слева.
Возможно, лучший способ добиться желаемого внешнего вида - это не отображать кнопку X по умолчанию - отключите функцию по умолчанию, а вместо этого нарисуйте свою собственную кнопку с собственным событием. Это может испортить системное контекстное меню, так что у вас больше не будет опции закрытия.
Можете ли вы проверить отправителя, чтобы узнать, не является ли он контекстуалом, и действовать соответствующим образом?