Получить удаленное состояние объекта

#c# #winforms

#c# #winforms

Вопрос:

Я не знаю, лучший ли это способ сделать это, но я пытаюсь создать форму, которая была бы родительской формой для всех моих других форм в моем приложении и проверяла бы, открыт ли ее экземпляр (фактически его дочерний элемент). Идея состоит в том, чтобы минимизировать объем кода во владении формой при создании экземпляра и открытии новых форм. Код в моей родительской форме работает хорошо, конструктор проверяет, работает ли приложение.OpenForms содержит экземпляр своего типа и закрывает его значение true, поэтому я не собираюсь публиковать его в данный момент. Проблема заключается в выполнении метода Show() в форме владельца. Этот код не будет работать (очевидно), если дубликат был найден

 FormA form = new FormA();
form.Show();
  

потому что объект формы уже был бы удален.
Но это также не работает:

 FormA form = new FormA();
if(form != null)
form.Show();
  

Правильным способом было бы проверить, удалена ли форма, поэтому я ищу свойство, которое удовлетворяло бы этому условию:

 if( state of form is Disposed)
  

Итак, вопрос: существует ли свойство, которое позволило бы выполнить этот тест?

Теперь я мог бы использовать обработчик событий для обработки исключений, чтобы справиться с этим, но это противоречило бы принципу statet в начале — ограничить код, необходимый для открытия формы.

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

1. боюсь, что нет (для всех доступных идентификаторов), если вы не предоставите некоторые дополнительные данные или не обнулите их.

2. @DanielA. Белый Цвет, однако, существует для элементов управления Windows Forms (и форм) 🙂

Ответ №1:

Вы всегда можете проверить IsDisposed свойство, но это никогда не должно быть правдой, если вы только что создали форму. Если вы вызываете Dispose внутри конструктора, вы собираетесь создать очень странный, сложный в использовании API.

В общем, я бы рекомендовал проверить, следует ли вам сначала создавать форму, затем создавать и показывать, подходит ли это. Позже это будет соответствовать ожиданиям других разработчиков (и, вероятно, вас самих).