Простым решением было бы показать ваш экземпляр Form2, используя переопределение, которое принимает владельца:
form2.Show(this);
Это будет гарантировать, что form2 закрыта, когда form1 закрыта.Как правило, это хорошая практика в приложениях с несколькими формами, так что у вас нет плавающих форм без владельца.
Обновление: модель событий является лишь одним из способов обработки взаимодействия междуформы.В вашем случае это не совсем подходит, потому что форма, получающая событие, может закрыться, и форма, вызывающая событие, не узнает об этом.
Альтернативой может быть написание Form2 с конструктором, который включает в себя экземпляр Form1 какпараметр (который будет сохранен как элемент уровня формы, например _Receiver
или что-то в этом роде).Вместо того, чтобы вызывать событие, Form2 будет вызывать метод, определенный в Form1, после проверки, чтобы узнать, был ли уже удален _Receiver:
if (!_Receiver.IsDisposed)
{
_Receiver.SomeMethod("some method");
}
Если ваш экземпляр Form1 все еще существует, будет вызван его метод;если он был закрыт и утилизирован, его метод вызываться не будет.Поскольку форма Form2 все еще существует, вы также можете сделать _Receiver публичным свойством и в любое время установить для его «владельца» какой-либо другой объект Form1.