Отобразить диалоговые формы многократного использования в C#
Пример
В этом примере показан другой подход. Здесь программа создает экземпляр диалога при запуске основной программы, а затем повторно использует один и тот же экземпляр всякий раз, когда ему нужно отображать диалог.
Если основная программа будет иметь возможность повторно использовать диалог, диалог не может быть уничтожен, когда пользователи его закрывают. Вместо того, чтобы разрушать диалог, программа скрывает его, чтобы его можно было повторно использовать позже.
Чтобы пользователь скрыл диалоговое окно, он отображает кнопку «Скрыть», которая выполняет следующий код.
// Скрыть диалог. private void btnHide_Click(object sender, EventArgs e) { this.Hide(); }
Пользователь все равно может попытаться закрыть диалог другими способами, например нажатием Alt + F4 или нажатием кнопки X в строке заголовка формы. Один из способов предотвратить это - установить свойство ControlBox в диалоговом окне false для удаления кнопок X, минимизации и максимизации. Это хорошо работает, если вам не нужно позволять пользователю минимизировать или максимизировать диалог, но неудобно, если пользователь может захотеть сделать диалог действительно большим.
В этом примере используется другой подход. Он использует следующий код, чтобы уловить событие FormClosing диалогового окна диалога.
// Не закрывать, скрывать. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); }
Этот код отменяет закрытие, а затем скрывает диалог, а не закрывает его.
Следующий код показывает, как отображает диалоговое окно основной программы.
// Форма многократного использования. private ReusableForm TheReusableForm = new ReusableForm(); // Отображение формы многократного использования. private void btnReusableForm_Click(object sender, EventArgs e) { TheReusableForm.Show(); TheReusableForm.Activate(); }
Переменная класса TheReusableForm содержит ссылку на диалог и инициализируется при загрузке формы.
Когда вы нажимаете кнопку «Многоразовая форма», обработчик события отображает диалоговое окно, а затем вызывает его метод Активировать. Этот метод устанавливает фокус на диалог и выталкивает его вверх. Это полезно, если форма уже видна и, возможно, находится за основной формой программы или другой программой на рабочем столе.
Вы можете передать основную форму в метод Show, чтобы сделать основную форму владельцем диалогового окна, но это вызывает некоторые проблемы. Самое сложное, что основная форма не будет закрыта до тех пор, пока ее собственные формы не будут закрыты. Поскольку обработчик событий FormClosing диалогового окна не позволяет закрыть диалоговое окно, это проблема. Работа над этой проблемой - достаточно большая проблема, которая, вероятно, не стоит того.
Итак, почему вы использовали бы эту технику вместо предыдущей, которая будет использовать новый экземпляр диалога каждый раз, когда это необходимо? Преимущество этого метода заключается в том, что диалог отображается немодально, чтобы пользователь мог постоянно поддерживать его в фоновом режиме. (Обратите внимание, что вы также можете отображать его, если хотите, модально.) Это может сделать его полезным для отображения и настройки параметров, которые используются основной программой.
Этот метод также не требует, чтобы основная программа копировала настройки в диалоговое окно и из него, когда оно отображается. Это может быть полезно, если настройки в диалоговом окне очень сложны и требуется некоторое время для настройки.