winforms
Отображение формы
Поиск…
Вступление
В этом разделе объясняется, как работает механизм WinForms для отображения форм и того, как вы контролируете их жизнь.
Показать немодальную или модальную форму
После определения структуры вашей формы с помощью дизайнера WinForms вы можете отображать свои формы в коде двумя разными способами.
Метод - модельная форма
Form1 aForm1Instance = new Form1(); aForm1Instance.Show();
Метод - Модальный диалог
Form2 aForm2Instance = new Form2(); aForm2Instance.ShowDialog();
Эти два метода имеют очень важное различие. Первый метод (немодальный) показывает вашу форму и затем немедленно возвращается, не дожидаясь закрытия только что открытой формы. Таким образом, ваш код продолжает все, что следует за вызовом Show. Второй метод вместо этого (модальный) открывает форму и блокирует любую активность во всем приложении до тех пор, пока вы не закроете форму с помощью кнопки закрытия или с некоторыми кнопками, соответствующим образом настроенными для закрытия формы
Закрытие немодальной формы
Используется немодальная форма (обычно), когда вам нужно показать что-то постоянное рядом с основным экраном приложения (подумайте о легенде или представлении о потоке данных, поступающих асинхронно с устройства или в дочернее окно MDI).
Но немодальная форма представляет собой уникальную задачу, когда вы хотите ее закрыть. Как получить экземпляр и вызвать метод Close в этом экземпляре?
Вы можете сохранить глобальную переменную, ссылающуюся на экземпляр, который вы хотите закрыть.
theGlobalInstance.Close();
theGlobalInstance.Dispose();
theGlobalInstance = null;
Но мы также можем использовать коллекцию Application.OpenForms, где механизм формы хранит все экземпляры форм, созданные и открытые.
Вы можете извлечь этот конкретный экземпляр из этой коллекции и вызвать метод Close
Form2 toClose = Application.OpenForms.OfType<Form2>().FirstOrDefault();
if(toClose != null)
{
toClose.Close();
toClose.Dispose();
}
Закрытие модальной формы
Когда форма показана с помощью метода ShowDialog
, необходимо установить свойство DialogResult
формы, чтобы закрыть форму. Это свойство может быть установлено с использованием перечисления, которое также называется DialogResult .
Чтобы закрыть форму, вам просто нужно установить свойство DialogResult
формы (любому значению с помощью DialogResult.None
) в каком-либо обработчике событий. Когда ваш код выйдет из обработчика событий, механизм WinForm скроет форму, а код, следующий за начальным вызовом метода ShowDialog
, продолжит выполнение.
private cmdClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
Вызывающий код может отображать возвращаемое значение из ShowDialog, чтобы определить, какую кнопку пользователь нажал в форме. При отображении с использованием ShowDialog()
, форма не удаляться автоматически (так как она была просто скрыта и не закрыта), поэтому очень важно , чтобы использовать , using
блок , чтобы обеспечить форма расположена.
Ниже приведен пример проверки результата использования встроенного OpenFileDialog
, проверки результата и доступа к свойствам из диалогового окна перед его удалением.
using (var form = new OpenFileDialog())
{
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
MessageBox.Show("Selected file is: " + form.FileName);
}
}
Вы также можете установить свойство DialogResult
на кнопку. Нажатие этой кнопки устанавливает для свойства DialogResult
в форме значение, связанное с кнопкой. Это позволяет закрыть форму без добавления обработчика событий для установки DialogResult
в коде.
Например, если вы добавите кнопку OK в свою форму и установите ее свойство в DialogResult.OK
форма автоматически закрывается, когда вы нажимаете эту кнопку, а вызывающий код получает DialogResult.OK
в ответ на ShowDialog()
метода ShowDialog()
.