我正在创建一个C#应用程序。我是.NET编程的新手。它基本上是一个大的Windows窗体应用程序,它显示各种形式,所有形式都基于用户控制相互关联。我的主要表单是登录页面,用于验证用户转到菜单表单(第二表单),其中有用户可以选择的选项。所以主要活动从菜单表格(第二种形式)开始,它包含一个包含用户名的标签。从菜单表单(第二种形式),它转到第三种形式,这是一种弹出形式,它导致第四种形式。基本上,移动到每个表单时隐藏第二个表单。现在从第四种形式开始,我想回到菜单表单(第二种形式)而不创建新实例。我试图在没有新实例但没有运气的情况下这样做。请参阅以下代码:
第二种形式(菜单):
private void button_Click(object sender, EventArgs e)
{
PopUp form3 = new Popup();
form3.Show();
// Hides the Menu Form(second form)
this.Hide();
}
第三种形式:
private void button_Click(object sender, EventArgs e)
{
var menu = new Menu();
menu.Hide();
// Hide Form #3
Hide();
form4.Show();
// Hide Form #3
Close();
}
第四种形式:
private void button_Click(object sender, EventArgs e)
{
if(grpSaved == false)
{
Form5 form5 = new Form5();
form5.Show();
form5.FormClosed += new FormClosedEventHandler(unsaved_FormClosed);
grpSaved = true;
}
else
{
var menu = new Menu();
Close();//closes fourth form
menu.Show();
}
}
此代码创建菜单表单的新实例(第二种形式)。请帮我解决这个问题。
答案 0 :(得分:0)
在第二个表单(您的主表单)上,如果您选择一个按钮或单击复选框以访问第三个和第四个表单,请尝试使用show dialog cod代替新表单,然后将此放置.Show( );在显示对话框之后,确保当您打开的表单关闭时,它将返回到您打开它的表单。
示例:
而不是:
PopUp form3 = new Popup();
form3.Show();
//hides the second (Menu) form
this.Hide();
尝试:
//Hide the second form
this.Hide();
//Bring up your PopUp form
using (PopUp form3 = new PopUp())
form3.ShowDialog();
//When your PopUp form closes the code should continue and show the second form again.
this.Show();
为了堆叠表格,请尝试以下方法:
//Menu Form
private void button_Click(object sender, EventArgs e)
{
this.Hide();
using(PopUp form3 = new Popup())
form3.ShowDialog();
this.Show();
}
//PopUp Form
private void button_Click(object sender, EventArgs e)
{
this.Hide();
using(Task form4 = new Task())
form4.ShowDialog();
this.Close();
}
//Task Form
private void button_Click(object sender, EventArgs e)
{
this.Close();
}
最后一个按钮只需要关闭任务表单。一旦关闭,PopUp表单上的代码将继续,这将关闭PopUp表单并返回到原始的Menu表单而不加载新表单,并在此过程中清除表单堆栈。
这是一个干净的解决方案,除了它本身并不保存其他两种形式的数据。再次单击“菜单”页面上的按钮将弹出一个新的PopUp表单。