"х", чтобы свернуть WinForm, ContextMenu, чтобы закрыть WinForm? - PullRequest
7 голосов
/ 16 июня 2010

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

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

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

Как мне заставить все работать так, как я хочу?

Ответы [ 4 ]

10 голосов
/ 16 июня 2010

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

}
0 голосов
/ 16 июня 2010

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

0 голосов
/ 16 июня 2010

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

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

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

0 голосов
/ 16 июня 2010

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

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

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