显示隐藏的表格

Arc*_*ian 10 c# winforms

我如何显示已隐藏使用的内容

this.Hide();
Run Code Online (Sandbox Code Playgroud)

我试过了

MainMenuForm.Show();
Run Code Online (Sandbox Code Playgroud)

这只是说我需要一个对象参考.然后我尝试了:

MainMenuForm frmMainMenu = new MainMenuForm();
frmMainMenu.Show();
Run Code Online (Sandbox Code Playgroud)

这似乎表明了适当的形式.但是当你退出应用程序时,它仍然保留在内存中,因为它没有显示隐藏的表单,而是显示了表单的新版本.实际上有2个表格实例(一个隐藏,一个可见).

只是为了澄清,MainMenuForm是启动形式.单击(例如)单击选项1时,MainMenuForm会在打开选项1表单时隐藏自身.我想知道的是如何制作MainMenuForm打开的选项1表单"取消隐藏"MainMenuForm然后关闭它自己.

这里的正确程序是什么?

提前致谢.

djd*_*d87 20

执行以下操作时:

MainMenuForm frmMainMenu = new MainMenuForm();
frmMainMenu.Show();
Run Code Online (Sandbox Code Playgroud)

您正在创建并显示MainMenuForm 的实例.

为了显示和隐藏MainMenuForm的实例,您需要保存对它的引用.即当我做紧凑框架应用程序时,我有一个使用单例模式的静态类,以确保我在运行时只有一个表单实例:

public class FormProvider
{
   public static MainMenuForm MainMenu
   {
       get
       {
          if (_mainMenu == null)
          {
            _mainMenu = new MainMenuForm();
          }
          return _mainMenu;
       }
   }
   private static MainMenuForm _mainMenu;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用它FormProvider.MainMenu.Show()来显示表单并FormProvider.MainMenu.Hide()隐藏表单.

Singleton模式(感谢拉撒路的链接)是管理中的WinForms应用形式,因为它意味着你只有一次创建表单实例的好方法.第一次通过其各自的属性访问表单时,表单被实例化并存储在私有变量中.

例如,第一次使用时FormProvider.MainMenu,将实例化私有变量_mainMenu.在您调用的任何后续时间FormProvider.MainMenu,_mainMenu将立即返回,而不会再次实例化.

但是,您不必将所有表单类存储在静态实例中.您可以将表单作为控制MainMenu的表单上的属性.

public partial class YourMainForm : Form
{
   private MainMenuForm _mainMenu = new MainMenuForm();

   protected void ShowForm()
   {
      _mainMenu.Show();
   }

   protected void HideForm()
   {
      _mainMenu.Hide();
   }
}
Run Code Online (Sandbox Code Playgroud)

更新:

刚看完那MainMenuForm是你的创业形式.实现类似于上面的单例示例的类,然后在应用程序的Program.cs文件中将代码更改为以下内容:

Application.Run(FormProvider.MainMenu);
Run Code Online (Sandbox Code Playgroud)

然后,您可以MainMenuForm通过FormProvider课程从应用程序中的任何位置访问.

  • @Lazarus - 我保持模式简单,因为它不是特别相关的问题,并且不想混淆OP. (3认同)
  • @GenericTypeTea,好点:) +1 - 也就是说,他没有特别要求单身人士,所以这种模式可能需要进一步解释. (3认同)
  • @Lazarus - 很同意.我只是试图展示一些不同的方式来保持对表单的引用,这是潜在的问题. (2认同)