Поиск…


Вступление

В этом разделе объясняется, как работает механизм 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() .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow