c# - 显示隐藏表格

标签 c# winforms

我如何显示已使用隐藏的来源

this.Hide();

我试过了

MainMenuForm.Show();

这只是说我需要一个对象引用。然后我尝试了:

MainMenuForm frmMainMenu = new MainMenuForm();
frmMainMenu.Show();

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

澄清一下,MainMenuForm 是启动窗体。当(例如)单击选项 1 时,MainMenuForm 然后在打开选项 1 窗体时隐藏自身。我想知道的是如何制作 MainMenuForm 打开的选项 1 表单“取消隐藏”MainMenuForm,然后自行关闭。

这里的正确步骤是什么?

提前致谢。

最佳答案

当您执行以下操作时:

MainMenuForm frmMainMenu = new MainMenuForm();
frmMainMenu.Show();

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

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

public class FormProvider
{
   public static MainMenuForm MainMenu
   {
       get
       {
          if (_mainMenu == null)
          {
            _mainMenu = new MainMenuForm();
          }
          return _mainMenu;
       }
   }
   private static MainMenuForm _mainMenu;
}

现在您只需使用 FormProvider.MainMenu.Show() 来显示表单,使用 FormProvider.MainMenu.Hide() 来隐藏表单。

Singleton Pattern (感谢 Lazarus 的链接)是在 WinForms 应用程序中管理表单的好方法,因为这意味着您只需创建一次表单实例。第一次通过其各自的属性访问表单时,表单被实例化并存储在私有(private)变量中。

例如,第一次使用FormProvider.MainMenu时,实例化了私有(private)变量_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();
   }
}

更新:

只需阅读 MainMenuForm 就是您的启动表单。实现一个类似于我上面的单例示例的类,然后在应用程序的 Program.cs 文件中将代码更改为以下内容:

Application.Run(FormProvider.MainMenu);

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

关于c# - 显示隐藏表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3005732/

相关文章:

c# - WebDriver 和 C# - NoSuchElement 异常

c# - 为什么 Process.StandardInput.WriteLine 不向我的流程提供输入?

C#全选ListBox中的项目——暂停事件处理

vb.net - 增加行大小取决于 DataGridView 中的图像

C#循环填充多个DataGridView

c# - 如何将 WPF MouseDevice.GetPosition(null) 转换为屏幕坐标?

c# - 类型 `Kaitai.Elf' 已经包含 `Bits' 的定义

c# - LocalStorage 重定向 Windows Phone 7

c# - 绑定(bind)到 IList,但得到 "Complex DataBinding accepts as a data source either an IList or an IListSource"

c# - 获取图表/表格的下一种颜色?