Дочерние формы MDI C#

#c# #mdichild #mdiparent

#c# #mdichild #mdiparent

Вопрос:

Как проверить событие закрытия дочерней формы MDI при нажатии кнопки «X» и сообщить родительской форме, что она закрыта?

Ответ №1:

Вы можете просто прослушать событие FormClosed в MDI.

 var childForm = new ChildForm();
childForm.FormClosed  = new FormClosedEventHandler(form_FormClosed);
childForm.Show();
  

Ответ №2:

В форме FormClosing event вы можете сделать

 TheMainForm form = (TheMainForm)this.MdiParent()
form.AlertMe( this );
  

Комментарии:

1. Нет . Метод AlertMe() в C #, что я не могу найти метод MdiParent, только свойство.

2. Вы бы создали свои собственные, сделали их общедоступными

Ответ №3:

Прикрепите закрытое событие к дочерней форме из основной формы

 Form mdiChild = new Form();
mdiChild.MdiParent = this;
mdiChild.Closed  = (s, e) => { //... };
mdiChild.Show();
  

не проверял код, но это не должно быть так сложно

Ответ №4:

что ж, приведенный ниже код показывает, как родительская форма распознает, была ли дочерняя форма закрыта или нет, и она также может распознать, добавлена ли какая-либо новая дочерняя форма к этой родительской форме..

 private List<Form> ChildFormList = new List<Form>();

private void MyForm_MdiChildActivate(object sender, EventArgs e)
{
   Form f = this.ActiveMdiChild;

   if (f == null)
   {
    //the last child form was just closed
    return;
   }

   if (!ChildFormList.Contains(f))
   {
      //a new child form was created
      ChildFormList.Add(f);
      f.FormClosed  = new FormClosedEventHandler(ChildFormClosed); // here the parent form knows that that child form has been closed or not
  }
  else
  {
    //activated existing form
  }
}
private void ChildFormClosed(object sender, FormClosedEventArgs e)
{
   //a child form was closed
    Form f = (Form)sender;
    ChildFormList.Remove(f);
}