我正在使用以下代码在Visual Studio 2015上使用C#中的Windows窗体构建桌面应用程序,其中我使用以下代码在其中附加了太多表单。
第一种形式:
using System;
namespace MyApps
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnForward_Click(object sender, EventArgs e)
{
SecondForm openForm= new SecondForm();
openForm.Show();
this.Hide();
}
}
}
第二种形式:
using System;
namespace MyApps
{
public partial class SecondForm: Form
{
public SecondForm()
{
InitializeComponent();
}
private void btnBack_Click(object sender, EventArgs e)
{
// +++++++++++ Need To Write The UPDATED Code Here +++++++++++
MainForm openForm= new MainForm();
openForm.Show();
this.Hide();
}
}
}
第三种形式:
using System;
namespace MyApps
{
public partial class ThirdForm: Form
{
public ThirdForm()
{
InitializeComponent();
}
private void btnForward_Click(object sender, EventArgs e)
{
SecondForm openForm= new SecondForm();
openForm.Show();
this.Hide();
}
}
}
所以我可以使用代码打开新表单,但我希望代码返回,如果我从SecondForm
打开MainForm
然后单击其后退按钮,那么这应该是一般的意思,我应该在MainForm
,但是如果我从ThirdForm
之类的任何其他表单打开它,那么点击SecondForm
上的相同按钮,我应该在ThirdForm
上,那么代码应该是什么我使用SecondForm
后退按钮?
答案 0 :(得分:3)
需要某种形式的州来记住您上次访问过的网页的内容。
您可以创建一个静态类(或使用Program.cs
),其中包含一个名为PreviousPage
的静态成员。每次单击新表单按钮时,都会适当地更新它。
然后一个后退按钮将隐藏它所在的任何形式,并在静态类中显示表单引用。
public static class FormState
{
public static Form PreviousPage;
}
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnForward_Click(object sender, EventArgs e)
{
SecondForm openForm= new SecondForm();
openForm.Show();
this.Hide();
FormState.PreviousPage = this;
}
private void btnBack_Click(object sender, EventArgs e)
{
FormState.PreviousPage.Show();
this.Hide();
FormState.PreviousPage = this;
}
}
答案 1 :(得分:2)
您可以将调用表单作为参数传递给被调用表单的构造函数,并将其存储在被调用表单中的私有变量中。
SecondForm openForm= new SecondForm(this)
在后退按钮单击处理程序中,您可以再次显示调用者表单,而无需创建新实例。看起来你不是以这种方式管理对象处理。
答案 2 :(得分:0)
一种方法是在Second Form
的构造函数中接受FormTypeusing System;
namespace MyApps
{
public partial class SecondForm: Form
{
private string _formType;
public SecondForm()
{
InitializeComponent();
}
public SecondForm(string FormType):this()
{
_formType = FormType;
}
private void btnBack_Click(object sender, EventArgs e)
{
// +++++++++++ Need To Write The UPDATED Code Here +++++++++++
if(string.IsNullorEmpty(_formType) || _formType.Equals("MainForm"))
{
MainForm openForm= new MainForm();
openForm.Show();
this.Hide();
}
else
{
// code to open third form
}
}
}
}
问题在于,如果你有太多的表单调用第二个表单,那么你可能最终会遇到其他情况或者swtich情况。我认为更优雅的方式是在下面的构造函数中传递Form本身
using System;
namespace MyApps
{
public partial class SecondForm: Form
{
private Form _previousForm;
public SecondForm()
{
InitializeComponent();
}
public SecondForm(Form form):this()
{
_previousForm = form;
}
private void btnBack_Click(object sender, EventArgs e)
{
_previousForm.Show();
this.Hide();
}
}
}
从第三或主要形式,你可以这样做
SecondForm form = new SecondForm(this);
form.Show();
this.Hide();