Kiran Vaidyanathan Ответов: 2

Закрытия дочернего MDI-закрытие родительской формы


Я создал новую родительскую форму MDI. Я установил MDI-контейнер этой формы в True. Я создал полосу меню. При нажатии на полоску меню должен быть показан дочерний элемент MDI. Ребенок MDI должен быть показан только в том случае, если условие истинно. Поэтому я добавил фрагмент кода в обработчик событий загрузки дочерней формы MDI следующим образом,

private void Form_Load(...)
{
...
  if(condition == false)
  {
     this.Close();
  }

}


Но, к сожалению, закрывается все приложение, а не только дочерняя форма. Какие-нибудь решения, пожалуйста?

Что я уже пробовал:

Я пробовал использовать это.Dispose() также. Это тоже не работает. Если я воспользуюсь этим.Close () при использовании этого метода не генерируется никаких исключений.Dispose () выдает исключение, говорящее, что : "не может показать удаляемый объект".

Есть идеи?

2 Ответов

Рейтинг:
7

Dave Kreskowiak

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


BillWoodruff

+5

Kiran Vaidyanathan

Я полагаю, что это единственное решение проблемы? Есть ли какой-нибудь способ "избежать" загрузки формы во время обработчика событий Form_Load ()? На данный момент я реализовал то, что вы сказали.

Как я уже говорил ранее,я буду создавать свой объект формы только по щелчку пункта меню. Так что я обеспечил проверку состояния там. Если условие удовлетворяет, то объект создается, иначе он не создается!

Спасибо вам за вашу помощь! :)

Dave Kreskowiak

Да, это единственное решение проблемы.

Kiran Vaidyanathan

Спасибо, Дэйв! :)

Рейтинг:
1

BillWoodruff

Я думаю, что ваше приложение закрывается с ошибкой типа:

- Необработанное исключение типа "система".InvalidOperationException ' произошло в системе.Окна.Forms.dll"

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

Вы также должны видеть эту информацию:

"Дополнительная информация: значение Close () не может быть вызвано при выполнении CreateHandle ()."

Если вы не видите этого типа сообщения об ошибке, то у вас что-то еще не так.

Как предлагает Дэйв к. в своем решении, ответ здесь заключается в том, чтобы никогда не выполнять код, создающий дочернюю форму, если условие не выполнено.


Kiran Vaidyanathan

Нет, Билл! Нет никакой ошибки, никакого сообщения! Приложение просто закрывается.

BillWoodruff

Что вы используете для кодирования ? Visual Studio ?

Kiran Vaidyanathan

Да, Билл!

C#, Visual Studio 2013, .NET Framework 4