C# 避免在c中重复加载表单#
我有两个windows窗体。Form1和form2都有一个按钮。当我点击form1中的按钮时,它会显示form2,反之亦然。但每次单击按钮时,它都会创建一个重复的表单。如何避免它。请告诉我。我的代码如下 表格1:C# 避免在c中重复加载表单#,c#,winforms,C#,Winforms,我有两个windows窗体。Form1和form2都有一个按钮。当我点击form1中的按钮时,它会显示form2,反之亦然。但每次单击按钮时,它都会创建一个重复的表单。如何避免它。请告诉我。我的代码如下 表格1: private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); } private void button1_Click(object sender
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Show();
}
表格2:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Show();
}
问题是,每次单击按钮时,您都在创建一个新表单。 要解决此问题,可以使窗体保持静态
static Form1 form = new Form1();
private void button1_Click(object sender, EventArgs e)
{
form.Show();
}
问题是,每次单击按钮时,您都在创建一个新表单。 要解决此问题,可以使窗体保持静态
static Form1 form = new Form1();
private void button1_Click(object sender, EventArgs e)
{
form.Show();
}
我的解决方案,你可以试试 表格1
private void button1_Click(object sender, EventArgs e)
{
FormCollection fc = Application.OpenForms;
bool present = false;
foreach (Form frm in fc)
{
if (frm.Name == "Form2")
{
present = true;
}
}
if (!present)
{
Form2 f2 = new Form2();
f2.Show();
}
}
表格2
private void button1_Click(object sender, EventArgs e)
{
FormCollection fc = Application.OpenForms;
bool present = false;
foreach (Form frm in fc)
{
if (frm.Name == "Form1")
{
present = true;
}
}
if (!present)
{
Form1 f1 = new Form1();
f1.Show();
}
}
我的解决方案,你可以试试 表格1
private void button1_Click(object sender, EventArgs e)
{
FormCollection fc = Application.OpenForms;
bool present = false;
foreach (Form frm in fc)
{
if (frm.Name == "Form2")
{
present = true;
}
}
if (!present)
{
Form2 f2 = new Form2();
f2.Show();
}
}
表格2
private void button1_Click(object sender, EventArgs e)
{
FormCollection fc = Application.OpenForms;
bool present = false;
foreach (Form frm in fc)
{
if (frm.Name == "Form1")
{
present = true;
}
}
if (!present)
{
Form1 f1 = new Form1();
f1.Show();
}
}
只需使用此方法,并在单击按钮时传递类似“this”的参数
public bool formIsExist(Form frmOpen)
{
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Name == frmOpen.Name)
{
return true;
}
}
return false;
}
只需使用此方法,并在单击按钮时传递类似“this”的参数
public bool formIsExist(Form frmOpen)
{
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Name == frmOpen.Name)
{
return true;
}
}
return false;
}
最简单的方法是确定目标表单是否已经存在,在这种情况下,打开它 例如,在
Form1
中执行以下操作:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = null;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i] is Form2)
{
f2 = Application.OpenForms[i];
break;
}
}
if (f2 == null)
f2 = new Form2();
f2.Show();
}
private void按钮1\u单击(对象发送者,事件参数e)
{
Form2 f2=空;
for(int i=0;i
要为所有表单创建通用方法,可以尝试以下方法:
public static T GetForm<T>() where T : Form
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i] is T)
return (T)Application.OpenForms[i];
}
return null;
}
public static T GetForm(),其中T:Form
{
for(int i=0;i
把它叫做:
Form2 f2 = GetForm<Form2>();
if (f2 == null) f2 = new Form2();
form2f2=GetForm();
如果(f2==null)f2=newform2();
最简单的方法是确定目标表单是否已经存在,在这种情况下,打开它
例如,在Form1
中执行以下操作:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = null;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i] is Form2)
{
f2 = Application.OpenForms[i];
break;
}
}
if (f2 == null)
f2 = new Form2();
f2.Show();
}
private void按钮1\u单击(对象发送者,事件参数e)
{
Form2 f2=空;
for(int i=0;i
要为所有表单创建通用方法,可以尝试以下方法:
public static T GetForm<T>() where T : Form
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i] is T)
return (T)Application.OpenForms[i];
}
return null;
}
public static T GetForm(),其中T:Form
{
for(int i=0;i
把它叫做:
Form2 f2 = GetForm<Form2>();
if (f2 == null) f2 = new Form2();
form2f2=GetForm();
如果(f2==null)f2=newform2();
@Mostafiz'的答案几乎是正确的。它只是错过了显示找到的当前表单的代码。(对不起,我还没有50%的声誉来写这篇评论)
请尝试以下代码:
表格1:
private void button1_Click(object sender, EventArgs e)
{
Form form = null;
//search all opened forms for one with name "Form2"
foreach( Form frm in Application.OpenForms )
if( frm.Name == "Form2" ) //this requires Form2 to be named "Form2"
{
form = frm;
break;
}
//if no opened Form2 was found, create a new one
if( form == null )
form = new Form2();
form.Show();
}
表格2:
private void button1_Click(object sender, EventArgs e)
{
Form form = null;
//search all opened forms for one with name "Form1"
foreach( Form frm in Application.OpenForms )
if( frm.Name == "Form1" ) //this requires Form1 to be named "Form1"
{
form = frm;
break;
}
//if no opened Form1 was found, create a new one
if( form == null )
form = new Form1();
form.Show();
}
@莫斯塔菲兹的回答几乎是正确的。它只是错过了显示找到的当前表单的代码。(对不起,我还没有50%的声誉来写这篇评论) 请尝试以下代码: 表格1:
private void button1_Click(object sender, EventArgs e)
{
Form form = null;
//search all opened forms for one with name "Form2"
foreach( Form frm in Application.OpenForms )
if( frm.Name == "Form2" ) //this requires Form2 to be named "Form2"
{
form = frm;
break;
}
//if no opened Form2 was found, create a new one
if( form == null )
form = new Form2();
form.Show();
}
表格2:
private void button1_Click(object sender, EventArgs e)
{
Form form = null;
//search all opened forms for one with name "Form1"
foreach( Form frm in Application.OpenForms )
if( frm.Name == "Form1" ) //this requires Form1 to be named "Form1"
{
form = frm;
break;
}
//if no opened Form1 was found, create a new one
if( form == null )
form = new Form1();
form.Show();
}
不要每次都创建一个新表单。将它们创建为隐藏(
OnLoad
),并且仅在单击按钮时显示.Show()
,因为每次单击按钮时都要创建表单的新实例。如何操作?请告诉我…新建将创建一个新实例。您需要了解如何“从另一个表单引用表单”不要每次都创建新表单。将它们创建为隐藏(OnLoad
),并且仅在单击按钮时显示.Show()
,因为每次单击按钮时都要创建表单的新实例。如何操作?请告诉我…新建将创建一个新实例。你需要研究如何“从另一个表单引用一个表单”,你说不工作是什么意思?你想在form2显示虎钳诗句后form1消失吗?我的目的是当我点击form1中的按钮时,form2将被打开。类似地,当我点击form2中的按钮时,它再次显示form1。但在这里,当我点击form2中的按钮时,它没有显示任何内容。它没有显示任何内容,因为form1的一个实例已经打开,您要求不要创建一个副本,如果再次打开,它将是重复的,因此它不会打开另一个。我想再次返回到form1。但是,没有打开重复的表单。在我的代码中,当我每次单击按钮时,它都会显示新表单。我的应用程序中运行了这么多表单。不工作是什么意思?你想在form2显示虎钳诗句后form1消失吗?我的目的是当我点击form1中的按钮时,form2将被打开。类似地,当我点击form2中的按钮时,它再次显示form1。但在这里,当我点击form2中的按钮时,它没有显示任何内容。它没有显示任何内容,因为form1的一个实例已经打开,您要求不要创建一个副本,如果再次打开,它将是重复的,因此它不会打开另一个。我想再次返回到form1。但是,没有打开重复的表单。在我的代码中,当我每次单击按钮时,它都会显示新表单。我的应用程序中正在运行这么多表单。如果表单已关闭怎么办?如果表单已关闭怎么办?这将确定表单是否已打开,但它不提供将其置于前端的方法。如果要将其置于前端,请添加frm.BringToFront()代码>这确定表单是否已打开,但它不提供将其放在前面的方法。如果要将其放在前面,请添加frm.BringToFront()代码>