1

我有一个表单,我想获得与下面代码中所述相同的表单的实例。而且我有一个按钮:每次按下此按钮时,如果创建了一个新表单,我希望它聚焦到那个窗口,如果没有,我想创建一个新表单。

我设法创建了一个新表单,但如果我想专注于它,代码不起作用,有什么想法吗?

private void btn_Click(object sender, EventArgs e)
{
  if (opened == false)
  {
    Text = "form1";
    var form = new myformapp();
    form.Show();
    opened = true;
    form.Text = "form2";
  }
  else
  {
    if (Application.OpenForms[1].Focused)
    {
      Application.OpenForms[0].BringToFront();
      Application.OpenForms[0].Focus();
    }
    if (Application.OpenForms[0].Focused)
    {
      Application.OpenForms[1].BringToFront();
      Application.OpenForms[1].Focus();
    }
  }
}
4

2 回答 2

1

You can try shortening your code without the need to introduce more variables with this example:

void button1_Click(object sender, EventArgs e) {
  bool found = false;
  for (int i = 0; i < Application.OpenForms.Count; ++i) {
    if (Application.OpenForms[i].GetType() == typeof(myformapp) &&
        Application.OpenForms[i] != this) {
      Application.OpenForms[i].Select();
      found = true;
    }
  }

  if (!found) {
    myformapp form = new myformapp();
    form.Show();
  }
}

Updated code from Francesco Baruchelli's comment.

于 2012-09-10T15:41:46.237 回答
1

如果我正确理解您要执行的操作,您可以在打开的表单中保留一个静态列表。每次打开您的表单实例时,您都将其添加到列表中,每次关闭时您都将其删除。当您按下按钮时,您可以检查列表的大小。如果是 1,则创建一个新表单,打开它并将焦点设置在它上面。如果大小已经是 2,则在列表中查找与执行单击事件的实例不同的实例。代码可能是这样的:

    private static List<Form1> openForms = new List<Form1>();

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 frm = null;
        if (openForms.Count == 2)
        {
            foreach (Form1 aForm in openForms)
                if (aForm != this)
                {
                    frm = aForm;
                    break;
                }
        }
        else
        {
            frm = new Form1();
            frm.Show();
        }
        frm.Focus();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        openForms.Add(this);
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        openForms.Remove(this);
    }
于 2012-09-10T14:30:07.637 回答