1

Есть главная форма. Она вызывает дочернюю:

ClientPref formConnect = new ClientPref();
formConnect.Owner = this;
formConnect.ShowDialog();

В событие закрытия дочерней формы:

private void ClientPref_FormClosing(object sender, FormClosingEventArgs e)
{
   if (!(this.Owner as Main).connected)
   {
       if (MessageBox.Show("Вы еще не подключились к серверу. Прервать попытку подключения?", "Прервать подключение?", MessageBoxButtons.YesNo) == DialogResult.Yes)
       {
          (this.Owner as Main).client = null;
       }
       else e.Cancel = true;
   }
}

Вроде бы, всё хорошо, но при закрытии главной формы снова срабатывает событие закрытия дочерней формы ровно столько раз, сколько раз она была открыта. На всякий случай, код события на закрытие главной формы таков:

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    server = null;
    client = null;
}

Где и что я мог недоглядеть и недодумать?

SaheR
  • 117
  • "Вроде бы, всё хорошо" -- ничего хорошего из-за плохого дизайна. дочернюю форму отвяжите от главной формы. они не должны зависить друг от друга. почитайте тут. – Stack Jan 08 '16 at 16:30
  • Так и не смог вспомнить, что может вызывать такое поведение. В отладке смотреть не пробовали, какое событие дергает закрытие второй раз? – Monk Jan 08 '16 at 17:53
  • @Monk "Так и не смог вспомнить, что может вызывать такое поведение" -- посмотрите дебаггером. где-то происходит подписка на события, а отписки - нет. – Stack Jan 08 '16 at 17:56
  • @Monk, ссылка на событие только одна (в ClientPref.Designer.cs), при выполнении по шагам ничего не обнаружил. Событие вызывается снова ровно после нажатия "крестика" на главной форме и непосредственно перед вызовом события Main_FormClosing. – SaheR Jan 08 '16 at 18:35
  • @SaheR в отладке можно ещё стек посмотреть. По стеку можно понять, кто вызвал, а по тому, кто вызвал - сообразить, зачем =) – Monk Jan 08 '16 at 18:51

0 Answers0