Forms C#-WinForm-关闭子窗体时如何关闭父窗体?

Forms C#-WinForm-关闭子窗体时如何关闭父窗体?,forms,parent,Forms,Parent,这是我的问题: 我有3张表格: 表格F家长 小学 表单OpenForm 我希望当我单击Form fChild上的按钮时,它会显示Form OpenFormand并隐藏Form FParen和Form fChild 我该怎么做? 请帮帮我 创建父窗体的新对象并关闭/隐藏它。如果要隐藏父窗体,请调用Hide()方法;如果要关闭父窗体,请调用Close()方法。最好的方法是创建一个单例类,因为如果继续这样做 Form1 f1 = new Form1(); f1.Show(); this.Hide(

这是我的问题:

我有3张表格:

  • 表格F家长
  • 小学
  • 表单OpenForm
我希望当我单击Form fChild上的按钮时,它会显示Form OpenFormand并隐藏Form FParen和Form fChild

我该怎么做?

请帮帮我

创建父窗体的新对象并关闭/隐藏它。如果要隐藏父窗体,请调用
Hide()
方法;如果要关闭父窗体,请调用
Close()
方法。

最好的方法是创建一个单例类,因为如果继续这样做

Form1 f1 = new Form1();
f1.Show();
this.Hide();
您继续实例化一个新表单,而不是返回到以前的表单

以下是您如何使用singleton设计模式:

public static class SingletonForm
{
  private static Form1 _f1;
  private static Form2 _f2;

  public static Form1 _Form1
   {
     get
     {
         if(_f1 == null)
          {
             _f1 = new Form1();
          }
          return _f1;
     }
   }

public static Form2 _Form2
   {
     get
     {
         if(_f2 == null)
          {
             _f2 = new Form2();
          }
          return _f2;
     }
   }
}
在您的按钮点击表单中,只需调用:

SingletonForm._Form1.Hide();
SingletonForm._Form2.ShowDialog();

//这是fChild OpenForm frm=new OpenForm()上的代码;this.Hide();frm.Show();我不知道如何关闭fParent。谢谢,非常感谢谢谢JC,但你可以说得很清楚。请谢谢,最好的评价这个类实际上是一个用来实例化一个类的设计模式,它在表单导航中非常有用。在这种情况下,当您在表单中调用该类时,它将首先检查表单是否已打开,如果已打开,它将不再创建新的表单实例,而是打开隐藏的表单,该表单仍在后台运行这里有一个关于singleton设计模式的首选项链接,在C#.Net中使用了多种设计模式,我没有给你提供确切的解决方案供你学习,这个网站不是用来询问代码的,但我给了你正确的逻辑。从中学习。
 Assembly frmAssembly = Assembly.LoadFile(Application.ExecutablePath);
            foreach (Type type in frmAssembly.GetTypes())
            {
                if (type.BaseType == typeof(Form))
                {
                    if (type.Name == formname))
                    {
                        Form frmshow = (Form)frmAssembly.CreateInstance(type.ToString());

                        foreach (Form form in this.MdiChildren)
                        {
                              form.Close();   // form close or hide
                        }
                        frmshow.Show();
                    }
                }
            }