#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.
В общем, я бы рекомендовал проверить, следует ли вам сначала создавать форму, затем создавать и показывать, подходит ли это. Позже это будет соответствовать ожиданиям других разработчиков (и, вероятно, вас самих).