“x”最小化WinForm,ContextMenu关闭WinForm?

时间:2010-06-15 21:07:29

标签: c# winforms

我想要在单击右上角的“x”时最小化的WinForm。 为实现这一目标,我有:

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

这一切都很好,但现在我有一个上下文菜单,可以选择关闭WinForm,但由于上面的代码,它只是最小化窗口。

我怎样才能让一切按照我想要的方式运作?

4 个答案:

答案 0 :(得分:10)

让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;
        }
    }

}

答案 1 :(得分:0)

单击“关闭”菜单时需要设置标记。

然后,您可以在FormClosing中检查标记并且不执行任何操作。

答案 2 :(得分:0)

X和系统上下文菜单都发送相同的Windows消息,不认为您可以轻松分离操作。这也是Alt + F4消息。

我还说我不喜欢这种非标准行为,如果我点击X我希望它关闭,而不是最小化,那就是左边的按钮2用于什么。

也许最好的方法是拥有你想要的外观和感觉不是显示默认的X按钮 - 关闭默认功能,而是用自己的事件绘制自己的。 这可能会使系统上下文菜单混乱,因此您不再拥有关闭选项。

答案 3 :(得分:0)

您可以检查发件人是否是上下文菜单并采取相应的行动吗?