C# 结束胜利形式的最佳方式

C# 结束胜利形式的最佳方式,c#,winforms,C#,Winforms,我需要在按钮单击事件中关闭窗体。在我的示例中,我隐藏了窗体。我认为这不是一个好方法。当我只关闭()时,窗体将被永久释放,需要重新运行程序来检索它 private void buttonClose_Click(object sender, EventArgs e) { this.Close(); //closing frmCalender } private void frmCalender_FormClosing(object sender, FormClosingEventArgs

我需要在按钮单击事件中关闭窗体。在我的示例中,我隐藏了窗体。我认为这不是一个好方法。当我只关闭()时,窗体将被永久释放,需要重新运行程序来检索它

private void buttonClose_Click(object sender, EventArgs e)
{
    this.Close(); //closing frmCalender 
}

private void frmCalender_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing)
    {
        this.Hide();
        e.Cancel = true;
    }
}

请给出关闭C#Windows窗体的最佳方法。

我认为,最好的方法是:

private void buttonClose_Click(object sender, EventArgs e)
{
    this.Hide(); 
}

如果要关闭表单,请调用
.close()

当我只执行Close()时,表单将被永久处理,需要重新运行程序来检索它

当您关闭表单时,我假定您没有对它的引用。如果是这样,您可以通过构造函数创建表单的新副本(
var form=new MyForm();


否则,在关闭表单后,我相信您应该能够再次调用
.Show()
,只要某些内容仍然引用您的表单。

为什么您认为您现在这样做还不够好?如果你需要隐藏表单而不是关闭表单,这是非常常见的方法。很难猜测这是怎么回事。写这个.Close()并没有多大意义,因为您知道它实际上将隐藏()。关闭窗口的方法不止一种,用户也可以单击关闭按钮或按Alt+F4。然后会发生什么?我只在需要调用.ShowDialog继续执行时使用.Hide。否则我调用.Close,因为表单实例不再需要了。不完全需要。它将在特定按钮单击时隐藏表单(本例中为
buttonClose
),但在窗口标题中的“标准”clos按钮单击时仍然关闭。如果是这样,代码应保持原样。没有必要更改原始代码中的任何内容。但是,如果表单的关闭按钮被隐藏,我的代码将是最好的:)你可以叫我学究,但同样:不完全;)即使关闭按钮被隐藏,用户也可以通过Alt-F4键盘快捷键关闭窗口。这仅仅是一次低级的尝试,试图产生与问题中显示的代码相同的效果。我忘记了Alt+F4:)。一般来说,我不会使用这种方法。如果一个表单是关闭的,最好让它死掉,并在需要时创建一个新的表单。如果表单没有关闭,就把它放在前面。这是一个很好的答案,除了最后一段是错误的。对于非模式对话框,
Close
方法还调用
Dispose