11.4. Немодальные окна

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

Создайте новое приложение и сразу же добавьте к нему новую форму, которую назовите NonModalForm. Теперь на главную форму поместите кнопку или любой другой компонент, с помощью которого можно вызвать команду, и по ее вызову напишите следующие две строки:

   NonModalForm childForm = new NonModalForm();
   childForm.Show();

Запустите программу и нажмите кнопку, чтобы создать дочернюю форму. Попробуйте переключиться на главную форму и убедитесь, что это можно сделать без проблем. Главное окно не блокируется, как это было при использовании модальных окон. Вы можете работать сразу в двух окнах, и более того — вы можете еще раз щелкнуть по кнопке в главном окне, и будет создано еще одно дочернее окно. Теперь вы сможете работать сразу с тремя окнами.

Тут можно вспомнить про область видимости переменных. По идее, когда метод обработки события кнопки завершает работу, переменная childForm уже не должна существовать. Да, это так. Переменная может быть уничтожена из стека, но вот объект формы в памяти, на который ссылается переменная, уничтожаться не будет, потому что он занят работой и будет уничтожен только после закрытия формы.

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

Предыдущая глава

11.3. Специфичный результат

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне