如何显示使用
隐藏的内容this.Hide();
我试过了
MainMenuForm.Show();
这只是说我需要一个对象引用。然后我尝试了:
MainMenuForm frmMainMenu = new MainMenuForm();
frmMainMenu.Show();
这似乎表明了适当的形式。但是当你退出应用程序时,它仍然保留在内存中,因为它没有显示隐藏的表单,而是显示了表单的新版本。实际上有2个表格实例(一个隐藏,一个可见)。
为了澄清,MainMenuForm是启动形式。单击(例如)单击选项1时,MainMenuForm会在打开选项1表单时隐藏自身。我想知道的是如何制作MainMenuForm打开的选项1表单“取消隐藏”MainMenuForm然后自行关闭。
这里的正确程序是什么?
提前致谢。
答案 0 :(得分:20)
执行以下操作时:
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 Pattern(感谢链接的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);
然后,您可以通过MainMenuForm
课程从应用程序的任何位置访问FormProvider
。
答案 1 :(得分:2)
最简单,最简单的方法是使用LINQ并查看Application.OpenForms
属性。我假设你只有一个表格实例(希望如此!),否则一定要在隐藏表格上有一些公共财产才能区分它。
以下代码将为您取消隐藏表单:
var formToShow = Application.OpenForms.Cast<Form>()
.FirstOrDefault(c => c is MainMenuForm);
if (formToShow != null)
{
formToShow.Show();
}
答案 2 :(得分:1)
您需要在创建第一个表单时保留对第一个表单的引用,然后保存该表单的代码可以在其上调用Show
。
如果您没有从某个地方打开该表单但是它被设置为启动表单,那么您需要更改它以便您有一个打开该表单的Main方法,或者您可以让该表单存储对自身的引用可以从其他地方访问的地方。
例如,一种快速而丑陋的方法是,向主窗体添加公共静态属性,然后当您隐藏窗体时,它还会将this
写入该属性,然后在需要时可以检索该属性部分代码。
答案 3 :(得分:1)
实际上这对我有用....
public class MainWindow : Form
{
Form _mainMenuForm = new MainMenuForm();
}
通过按钮点击事件调用它。
private void buttonclick()
{
if (_mainMenuForm.Visible)
{
_mainMenuForm.Visible = false;
}
else
{
_mainMenuForm.Visible = true;
}
}
答案 4 :(得分:0)
调用引用的表单。
像:
Calling parent
----------
public MyForm f {get;set;}
void DoStuff()
{
f = new MyForm();
f.Show();
}
MyForm
----------
void DoOtherStuff()
{
this.hide();
}
Parent
----------
void UnHideForm()
{
f.show();
}
答案 5 :(得分:0)
存储对表单的引用,并在其上调用.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的表单。
答案 6 :(得分:-1)
另一个更简单的方法是循环打开表单,看看哪些仍在运行并打开它......
foreach (Form oForm in Application.OpenForms)
{
if (oForm is MainMenuForm)
{
oForm.Show();
break;
}
}