“x” для уменьшения WinForm, ContextMenu для закрытия WinForm?

У меня есть WinForm, который я хочу минимизировать, когда "x" в правом верхнем углу нажат. Для выполнения этого я имею:

    private void Form_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
        WindowState = FormWindowState.Minimized;
    }

Это - все хорошо и хороший, но теперь у меня есть контекстное меню, которое имеет опцию закрыть WinForm, но из-за кода выше, это просто минимизирует окно.

Как я могу заставить все прокладывать себе путь, я хочу это к?

7
задан sooprise 15 June 2010 в 21:07
поделиться

4 ответа

Попросите обработчика события щелчка установить флаг 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;
        }
    }

}
10
ответ дан 7 December 2019 в 01:16
поделиться

Вам необходимо установить флажок при нажатии на меню «Закрыть».

Затем вы можете проверить наличие флага в FormClosing и ничего не делать.

0
ответ дан 7 December 2019 в 01:16
поделиться

И X, и системное контекстное меню отправляют одно и то же сообщение Windows, не думайте, что вы можете легко разделить действие. Это также сообщение Alt + F4.

Я бы также сказал, что мне бы не понравилось это нестандартное поведение, если я нажму X, я хочу, чтобы он был закрыт, а не свернут, для этого предназначена кнопка 2 слева.

Возможно, лучший способ добиться желаемого внешнего вида - это не отображать кнопку X по умолчанию - отключите функцию по умолчанию, а вместо этого нарисуйте свою собственную кнопку с собственным событием. Это может испортить системное контекстное меню, так что у вас больше не будет опции закрытия.

0
ответ дан 7 December 2019 в 01:16
поделиться

Можете ли вы проверить отправителя, чтобы узнать, не является ли он контекстуалом, и действовать соответствующим образом?

0
ответ дан 7 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

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