0

我得到了Form1,当单击某个按钮时,它会创建另一个表单:

 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     Form f5 = new Form5();
     f5.Show();
 }

当它发生时,我需要确定这个表单 f5 是否存在,所以如果它存在,当按下按钮时,它只是切换到现有表单而不是创建新表单。如果它不存在,那么它必须创建新表单. 如果我无法检查某些对象是否存在,直到我声明它们,我该怎么做?如何在我声明它之前检查 f5 是否存在,所以我只能在没有这种形式并且需要它时才能创建它?

4

3 回答 3

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 什么也没告诉我。

于 2013-05-08T19:24:49.390 回答
1

创建Form5为私有变量。在创建新的之前,请在创建新之前检查它是否存在。

 private Form5 form5 = null;

 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if(f5 == null || !f5.Visible)
         f5 = new Form5();

     f5.Show();
 }
于 2013-05-08T19:23:30.820 回答
0

我只是将实例作为父代码的一部分:

Form f5 = null;

private void ToolStripMenuItem_Click(object sender, EventArgs e) { 
if (f5 == null) {
      f5 = new Form5(); 
      f5.Show();
  }
 }

稍后编辑:你是对的,你已经捕获了正确的代码序列:)。我的只会打开一次。

如果您的应用程序不是 MDI,我宁愿使用 ShowDialog()

于 2013-05-08T19:25:16.657 回答