关闭另一个表单到C#

时间:2011-12-26 15:38:52

标签: c# coding-style

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

我尝试了这个命令;

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

但这结束了所有形式。我只想关闭Form1

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您的Main方法包含:

  Application.Run(form1);

您正在关闭form1,您的申请将关闭。

你可以“临时”隐藏form1,同时显示ac。使用ShowDialog来阻止代码,直到交流表单关闭为止:

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

答案 2 :(得分:0)

根据哪种表单调用哪种形式(以及如何),您必须以某种方式“冒泡”请求从登录表单中关闭到主表单。

假设表单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;
    }
}

请注意,这只是一个(不完整的例子)。我相信您的需求可以有其他解决方案。

答案 3 :(得分:0)

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

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

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