C# 在C中关闭所有以前的表单并打开新表单#
在Windows窗体C#中打开新窗体时,如何关闭背景窗体C# 在C中关闭所有以前的表单并打开新表单#,c#,winforms,C#,Winforms,在Windows窗体C#中打开新窗体时,如何关闭背景窗体 它不应该是要关闭的特定表单 每当打开一个窗体时,它应该关闭所有后台窗体 由于只有一个窗体处于活动状态且处于前台,因此在打开新窗体时,可以关闭前一个窗体: 以您的主要形式: Form previous_form = null; 创建任何表单时: if( previous_form != null) previous_form.Close(); SomeForm someform = new SomeForm(); previsou
由于只有一个窗体处于活动状态且处于前台,因此在打开新窗体时,可以关闭前一个窗体: 以您的主要形式:
Form previous_form = null;
创建任何表单时:
if( previous_form != null)
previous_form.Close();
SomeForm someform = new SomeForm();
previsous_form = some_form;
someform.Show();
两种方法
首先是使用应用程序。OpenForms
如下:
foreach (Form form in Application.OpenForms)
{
if(Form is YourMainFormClassName) //Check if current form is your main form and do not close it since your app would close. You can use .Hide() if you want
return;
form.Close();
}
public partial class YourForm
{
public YourForm()
{
InitializeComponents();
this.Tag = Settings.MaxIdOfOpenedForm() + 1; //We are setting Tag of newly opened form
Settings.OpenedForms.Add(this); //Adding new form to opened forms.
}
}
另一种方法是使用列表
,但您不能执行列表
,因为在删除时,如果您想删除特定的表单,并且像您的列表一样,您会遇到问题。删除(此)
它将删除具有该表单类的所有项目。当然,只有在多次打开一个表单时才会发生这种情况,但为了避免这种情况,我们将使用form.Tag
属性
public static class Settings //Class is also static
{
public static List<Form> OpenedForms = new List<Form>();
public static int MaxIdOfOpenedForm() //With this method we check max ID of opened form. We will use it later
{
int max = -1;
foreach(Form f in OpenedForms)
{
if(Convert.ToInt32(f.Tag) > max)
max = Convert.ToInt32(f.Tag);
}
return max;
}
public static void RemoveSpecificForm(Form form) //Remove specific form from list
{
for(int i = 0; i < OpenedForms.Count; i++)
{
if((OpenedForms[i] as Form).Tag == form.Tag)
{
OpenedForms.Remove(form);
return;
}
}
}
public static void CloseAllOpenedForms()
{
for(int i = 0; i < OpenedForms.Count; i++)
{
OpenedForms.Remove(OpenedForms[i]);
}
}
}
包含控件数据的对象。默认值为空
因此,我们将使用它来存储表单的Id
现在,当我们准备好系统时,让我们来编写它:
首先,我们需要所有类都可以访问的列表
,这样我们就可以像公共静态
属性一样创建它
public static class Settings //Class is also static
{
public static List<Form> OpenedForms = new List<Form>();
public static int MaxIdOfOpenedForm() //With this method we check max ID of opened form. We will use it later
{
int max = -1;
foreach(Form f in OpenedForms)
{
if(Convert.ToInt32(f.Tag) > max)
max = Convert.ToInt32(f.Tag);
}
return max;
}
public static void RemoveSpecificForm(Form form) //Remove specific form from list
{
for(int i = 0; i < OpenedForms.Count; i++)
{
if((OpenedForms[i] as Form).Tag == form.Tag)
{
OpenedForms.Remove(form);
return;
}
}
}
public static void CloseAllOpenedForms()
{
for(int i = 0; i < OpenedForms.Count; i++)
{
OpenedForms.Remove(OpenedForms[i]);
}
}
}
当我们关闭表单时,我们需要从列表中删除表单:
private void YourFormClosed(object sender, EventArgs e)
{
RemoveSpecificForm(this);
}
当我们设置它时,只需调用closeAllowenedForms()
此方法在性能上可能会有一些改进,但这是基本的,您可以进一步扩展它。您有打开新表单的父表单吗?
foreach(var form in Application.OpenForms)form.Close()代码>(在WinForms的情况下)是的,它有一个父表单@Ashkan Mobayen Khiabani请您详细说明一下..@Dmitry BychenkoJimi:是的Hide()
可能是一个更好的选择。不必要:您好,我想关闭背景表单,但不应指定要关闭的此表单或该表单@Ashkan Mobayen Khiabaniwell当新表单打开时,您希望关闭backgronud表单,当新表单打开时,所有以前的表单都将在后台。因此,打开每个表单时,您应该关闭上一个表单(将转到后台),但我为什么要指定上一个表单,因为它的后台可能有任意数量的表单…@Ashkan Mobayen Khiabani是否有任何解决方案…请发送给我。@SouravKumarDas如果您有多个表单要关闭,你需要在某处保留这些参考资料的列表。或者关闭Application.OpenForms
中除起始表单(在Program.cs
中运行的表单)之外的所有表单。不过,它看起来不像是一个华丽的设计。