C#如何打开上一个窗体,关闭当前窗体?
How To Open The Previous Form And Close The Current In C#?
我正在 Visual Studio 2015 年开发基于 Windows C# 表单的桌面应用程序,其中使用以下代码在其中附加了太多表单。
第一种形式:
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();
}
}
}
所以我可以使用打开新表单的代码,但我希望代码返回,如果我从 MainForm
打开 SecondForm
然后单击其返回,这应该是一般的意思按钮,我应该在 MainForm
但如果我从 ThirdForm
等任何其他形式打开它,然后在 SecondForm
上单击相同的按钮,我应该在 ThirdForm
所以怎么办我应该在 SecondForm
后退按钮上使用代码吗?
一种方法是在 Second Form 的构造函数中接受 FormType
using 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
}
}
}
}
这里的问题是,如果您有太多调用第二个表单的表单,那么您最终可能会遇到 if else 或 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();
需要某种形式的状态来记住您上次访问的页面是什么。
您可以创建一个静态 class(或使用 Program.cs
),它有一个名为 PreviousPage
的静态成员。每次单击新表单按钮时,都会对其进行适当更新。
然后后退按钮将隐藏它所在的任何表单,并在您的静态 class.
中显示表单引用
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;
}
}
您可以将调用表单作为参数传递给被调用表单的构造函数,并将其存储在被调用表单的私有变量中。
SecondForm openForm= new SecondForm(this)
在后退按钮单击处理程序中,您可以再次显示调用方表单,而无需创建新实例。不过,您似乎没有以这种方式管理对象处理。
我正在 Visual Studio 2015 年开发基于 Windows C# 表单的桌面应用程序,其中使用以下代码在其中附加了太多表单。
第一种形式:
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();
}
}
}
所以我可以使用打开新表单的代码,但我希望代码返回,如果我从 MainForm
打开 SecondForm
然后单击其返回,这应该是一般的意思按钮,我应该在 MainForm
但如果我从 ThirdForm
等任何其他形式打开它,然后在 SecondForm
上单击相同的按钮,我应该在 ThirdForm
所以怎么办我应该在 SecondForm
后退按钮上使用代码吗?
一种方法是在 Second Form 的构造函数中接受 FormType
using 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
}
}
}
}
这里的问题是,如果您有太多调用第二个表单的表单,那么您最终可能会遇到 if else 或 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();
需要某种形式的状态来记住您上次访问的页面是什么。
您可以创建一个静态 class(或使用 Program.cs
),它有一个名为 PreviousPage
的静态成员。每次单击新表单按钮时,都会对其进行适当更新。
然后后退按钮将隐藏它所在的任何表单,并在您的静态 class.
中显示表单引用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;
}
}
您可以将调用表单作为参数传递给被调用表单的构造函数,并将其存储在被调用表单的私有变量中。
SecondForm openForm= new SecondForm(this)
在后退按钮单击处理程序中,您可以再次显示调用方表单,而无需创建新实例。不过,您似乎没有以这种方式管理对象处理。