显示隐藏的表格

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

this.Hide(); 

我试过了

 MainMenuForm.Show(); 

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

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

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

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

这里的正确程序是什么?

提前致谢。

执行以下操作时:

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

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

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

 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模式 (感谢Lazarus的链接)是一种管理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(); } } 

更新:

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

 Application.Run(FormProvider.MainMenu); 

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

最简单和最简单的方法是使用LINQ并查看Application.OpenForms属性。 我假设你只有1个表单实例(希望如此!),否则请确保在隐藏表单上有一些公共属性才能区分它。

以下代码将为您取消隐藏表单:

 var formToShow = Application.OpenForms.Cast
() .FirstOrDefault(c => c is MainMenuForm); if (formToShow != null) { formToShow.Show(); }

您需要在创建第一个表单时保留对第一个表单的引用,然后保存该引用的代码可以在其上调用Show

如果您没有从某个地方打开该表单,但它被设置为启动表单,那么您需要更改它以便您有一个打开该表单的Main方法,或者您可以让该表单存储对某个地方的引用从其他地方访问。

例如,一种快速而丑陋的方法是,向mainform添加一个公共静态属性,然后当你隐藏表单时,它也会将其写入this属性,然后可以在代码的其他部分需要时检索该属性。

实际上这对我有用….

 public class MainWindow : Form { Form _mainMenuForm = new MainMenuForm(); } 

通过按钮单击事件调用它。

 private void buttonclick() { if (_mainMenuForm.Visible) { _mainMenuForm.Visible = false; } else { _mainMenuForm.Visible = true; } } 

存储对表单的引用并在其上调用.Hide()和.Show()。

例如:

 public class MainWindow : Form { private Form _mainMenuForm = new MainMenuForm(); public void btnShowMenuForm_Click(...) { _mainMenuForm.Show(); } public void btnHideMenuForm_Click(...) { _mainMenuForm.Hide(); } //etc } 

此示例假定您有一个启动MainMenuForm的表单。

调用引用的表单。

喜欢:

 Calling parent ---------- public MyForm f {get;set;} void DoStuff() { f = new MyForm(); f.Show(); } MyForm ---------- void DoOtherStuff() { this.hide(); } Parent ---------- void UnHideForm() { f.show(); } 

另一个更简单的方法是循环打开表单以查看哪些仍在运行并打开它…

 foreach (Form oForm in Application.OpenForms) { if (oForm is MainMenuForm) { oForm.Show(); break; } }