关闭c#的另一个窗体

本文关键字:窗体 另一个 关闭 | 更新日期: 2023-09-27 18:18:45

我有2个windows表单,1个登录表单和1个主表单。我想关闭主表单和登录表单在一起。我该怎么办?

我试过这个命令;

Form2 ac = new Form2();
ac.Show();
this.Close();

,但这关闭所有的形式。我只想关闭Form1

关闭c#的另一个窗体

如果你的Main方法包含:

  Application.Run(form1);

当您关闭form1时,您的应用程序关闭。

您可以在显示ac时"临时"隐藏form1。使用ShowDialog来阻塞您的代码,直到ac表单关闭:

   using (Form2 ac = new Form2()) {
     this.Hide();
     if (ac.ShowDialog() == DialogResult.OK) {
       this.Show();
     } else {
      // Exit app
       this.Close();   
     }
   }

如果你关闭主窗体当然所有的窗口都会关闭,主窗体包含所有其他的表单,你的Q不清楚,你能给我们一个清晰的片段,将显示你想做什么?

取决于哪个表单调用哪个表单(以及如何调用),您必须以某种方式将登录表单内的请求"弹出"到主表单。

假设形式1模态地调用形式2:

public partial class Form1 : Form
{
    // ...
    private void callForm2()
    {
        var form2 = new Form2();
        if ( form2.ShowDialog( this )== DialogResult.Abort )
        {
            // Close myself if called form instructs me to close.
            Close();
        }
    }
}

如您所见,我使用DialogResult.Abort作为"通信信号"关闭。在Form2中可以这样做:

public partial class Form2 : Form
{
    // ...
    private void buttonCloseAll_Click( object sender, EventArgs args )
    {
        // Close myself _and_ return the abort result to the caller.
        DialogResult = DialogResult.Abort;
    }
}

请注意,这只是一个(不完整的例子)。

您打开的表单是应用程序的主要表单。这与您如何命名表单或表单上的内容无关。如果您关闭主表单,您的应用程序将终止。

在这种情况下你可以做两件事:

  1. 隐藏你的登录表单而不是关闭它
  2. 首先打开你的主表单,并使用你的登录表单作为一个模态对话框在它的顶部。在这种情况下,您可以关闭登录表单,让您的应用程序继续运行。