Как закрыть MDIChild C # VS2010? - PullRequest
0 голосов
/ 05 мая 2011

На самом деле это мой первый проект. Хотя я хочу конвертировать свой VB.Net2008 в C # 2010, у меня есть несколько пояснений, пожалуйста.

В Form2 Свойства, которые я установил - IsMDIContainer = True. Затем приведенный ниже код, чтобы открыть мой MdiChild, и теперь в чем моя проблема, когда я нажимаю кнопку закрытия, он также закрывает MDIParent. Но мне нужно закрыть только mdichild ... для этого я пытался как стиль Vb.Net2008 с помощью следующих кодов, помещенных в MDIParent Form2, это не работает. Любые правильные направления ...

private void toolStripButton1_Click(object sender, EventArgs e)
{
  Form3 NwMdiChild2 = new Form3;
  NwMdiChild2.MdiParent = this;
  NwMdiChild2.Dock = System.Windows.Forms.DockStyle.Fill;
  NwMdiChild2.Show();
}

private void Form2_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
  Form[] MdiChildForms = this.MdiChildren;
  int kkk1 = MdiChildForms.Length;
  int x = 0;
  for (x = 0; x <= MdiChildForms.Length - 1; x += 1) 
  {
    if (MdiChildForms[x].Name == "Form1")
    {
      kkk1 = kkk1 - 1;
    }
    MdiChildForms[x].Close();
  }
  if (kkk1 > 0) 
  {
  // For Not Closing
  e.Cancel = true;
  }
  else
  {
    // For Closing
    e.Cancel = false;
    Application.Exit();
  }
}

Есть ли у меня правильные указания?

1 Ответ

1 голос
/ 05 мая 2011

Я не уверен, хорошо ли я понимаю, чего вы хотите достичь: хотите ли вы, чтобы при нажатии кнопки закрытия родительской формы, гарантирующей закрытие родительской формы, все дочерние формы закрывались? Form2 - это ваша основная форма (родительский контейнер MDI), Form3 - это дочерние MDI, не так ли?
Пожалуйста, попробуйте следующий код и скажите, если это то, что вы просите:

private void toolStripButton1_Click(object sender, EventArgs e)
{
    Form3 NwMdiChild2 = new Form3();    //don't forget ()
    NwMdiChild2.MdiParent = this;
    NwMdiChild2.Dock = System.Windows.Forms.DockStyle.Fill;
    NwMdiChild2.Show();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    //if no MDI child - this is going to be skipped and norlmal Form2 close takes place
    if (this.MdiChildren.Length > 0)    //close childrens only when there are some
    {
        foreach (Form childForm in this.MdiChildren)
            childForm.Close();

        e.Cancel = true;  //cancel Form2 closing
    }
}
...