如何将关闭按钮变为最小化按钮:C# Winforms

3
我该如何使应用程序中(位于右上角)默认的“关闭”按钮变为“最小化”? 实际上,我希望在单击叉号时将应用程序最小化,但当用户单击我的菜单选项“退出”时,则退出应用程序。 我编写了以下代码以便在单击关闭按钮时最小化窗体:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (minimize_on_close == "Yes")
        {
            e.Cancel = true;
            this.WindowState = FormWindowState.Minimized;
        }
    }

当点击菜单选项中的退出时,应该编写以下代码以退出应用程序。

private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

现在,当我点击“退出”菜单选项时,表格仍然会被最小化而不是退出。

有人能帮忙吗?


请不要使用像这样的字符串字面量 - *minimize_on_close == "Yes"*。 - decyclone
那我应该使用什么? - user1547766
请不要在“关闭”按钮上最小化。我想使用它来终止任何应用程序(并且我想知道当我单击它时它会做什么)。无论它是一个“始终在托盘应用程序”,都不应该影响。我不想去寻找退出选项。如果关闭按钮不能做我期望的事情,请不要显示它。 - Anders Forsgren
在这种情况下,bool 应该足够了。如果需要更多选项,可以使用 enum 或者常量。 - decyclone
2个回答

3

请试一下

编辑 可以使用Resize事件来实现此功能,

private void Form1_Resize(object sender, EventArgs e) 
  { 
  if (this.WindowState == FormWindowState.Minimized) 
  this.Hide(); 
  }

然后使用 FormClosing 事件取消关闭并最小化窗体,如下所示。
private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
if (e.CloseReason == CloseReason.UserClosing) 
 { 
  e.Cancel = true; 
  this.WindowState = FormWindowState.Minimized; 
 } 
}

在“Dispose”方法中最小化一个窗体是没有意义的。 - ta.speot.is
只是为了检查 Forms.WindowState - dotmido

3
在决定最小化窗口之前,请检查FormClosingEventArgs.CloseReason是否等于CloseReason.UserClosing。或者,可以比较CloseReason.ApplicationExitCall
CloseReason的文档中可以看到:

成员

...

UserClosing

用户通过用户界面(UI)关闭窗体,例如通过单击窗体窗口上的关闭按钮、从窗口控件菜单中选择关闭或按下ALT+F4。

...

ApplicationExitCall

调用了Application类的Exit方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接