我得到Form1
,当点击某个按钮时会创建另一个表单:
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form f5 = new Form5();
f5.Show();
}
当它发生时,我需要确定这个形式f5是否存在,所以如果它存在,按下按钮时,它只是切换到现有的形式而不是新的形式。如果它不存在,那么它必须创造新的形式。 我如何做到这一点,如果我无法检查是否存在某些对象,直到我声明它们为止? 如何在我声明它之前检查f5存在,所以我只有在没有这种形式且需要时才能创建它?
答案 0 :(得分:4)
正确这样做的方法是在创建Form5
对象时保持对它的引用。例如,您可以通过声明类级变量来执行此操作。
public class MyForm : Form
{
private Form5 m_frm5 = null;
// ...other code...
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (m_frm5 == null)
{
m_frm5 = new Form5();
}
m_frm5.Show();
}
}
显然,您需要根据访问表单对象的位置选择适当的范围。 static
局部变量也可能同样有效,或者您可能需要将其设置为整个应用程序的全局变量。
或者,您可以遍历Application.OpenForms
集合,检查是否已创建Form5
的实例。
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form f in Application.OpenForms)
{
if (f.GetType() == typeof(Form5))
{
f.Show();
return;
}
}
Form5 frm5 = new Form5();
frm5.Show();
}
专家提示为表单类选择比默认值更多的描述性名称。 Form5什么也没告诉我。
答案 1 :(得分:1)
将Form5
创建为私有变量。在创建新的之前,请在创建新的之前检查它是否存在。
private Form5 form5 = null;
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if(f5 == null || !f5.Visible)
f5 = new Form5();
f5.Show();
}
答案 2 :(得分:0)
我只是将实例作为父代码的一部分:
Form f5 = null;
private void ToolStripMenuItem_Click(object sender, EventArgs e) {
if (f5 == null) {
f5 = new Form5();
f5.Show();
}
}
稍后编辑:你是对的,你已经捕获了正确的代码序列:)。我只会打开一次。
如果您的应用程序不是MDI,我宁愿使用ShowDialog()