【问题标题】:Return to the main Form, and close the others, from a form that has other forms opened (C#)?从打开了其他表单的表单返回主表单并关闭其他表单(C#)?
【发布时间】:2016-06-02 02:25:42
【问题描述】:

我的问题是我有 Form1,它打开 Form2,然后它打开另一个 Form,我想在最后一个 Form 上创建一个按钮,返回主窗体并关闭所有其他窗体。

这是我编写表单开口的方法:

Form2 popup= new Form2();
this.Hide();
popup.ShowDialog();
This.Show();

我对另一个表单做了同样的事情,我尝试做这样的事情:

Form1 main= new Form1();
this.Close();
main.Show();

但它会打开所有其他表单。

谢谢!

【问题讨论】:

    标签: c# forms


    【解决方案1】:

    您可以使用Application.OpenForms 获取应用程序中所有打开的表单的列表。然后你可以遍历它们并关闭所有你不想要的。像这样的:

    foreach (Form f in Application.OpenForms) {
        if (f.Name != this.Name)
            f.Close();
    }
    Form1 main= new Form1();
    this.Close();
    main.Show();
    

    我现在没有办法测试代码,但是你可能可以关闭当前表单,所有其他人都在循环中,所以代码可以简化为:

    foreach (Form f in Application.OpenForms) {
        f.Close();
    }
    Form1 main= new Form1();
    main.Show();
    

    【讨论】:

      【解决方案2】:

      您可以通过您实例化的每个表单的构造函数传递 MainForm 的引用。

      Form2 popup = new Form2(this);
      this.Hide();
      popup.ShowDialog();
      

      然后在 Form2 上保留 MainForm 的全局引用

      private Form _mainForm;
      
      // constructor of Form2
      public Form2(Form mainForm)
      {
          _mainForm = mainForm;
      }
      

      然后使用该引用,您可以在任何地方调用它。您也可以将其传递给您的第三个表单

      this.Close();
      _mainForm.Show();
      

      这样做的好处是您不会丢失主窗体上的任何预定义设置,因为您没有创建新实例,只是显示它

      【讨论】:

        【解决方案3】:

        试试这个

        Form1 f1 = new Form1();
        f1.Show();
        this.Hide();
        

        this.Hide() 到您要隐藏的表单。

        【讨论】:

          猜你喜欢
          • 2015-04-09
          • 1970-01-01
          • 1970-01-01
          • 2012-10-26
          • 1970-01-01
          • 2018-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多