Поделиться через


Практическое руководство. Отображение модальных и немодальных форм Windows Forms

Формы и диалоговые окна могут быть модальными и немодальными. Модальная форма или диалоговое окно должно быть закрыто или спрятано перед продолжением работы с другими формами приложения. Дополнительные сведения о работе с диалоговыми окнами см. в разделе Ввод пользовательских данных в диалоговых окнах.

Диалоговые окна, в которых отображаются важные сообщения, должны всегда быть модальными. Диалоговое окно О программе в Visual Studio является примером модального диалогового окна. MessageBox — модальная форма, которую можно использовать.

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

Модальные формы сложнее запрограммировать, так как пользователь может переключаться между ними в непредсказуемой последовательности. Необходимо сохранять непротиворечивое состояние приложения, несмотря на действия пользователя. Часто окна служебных программ отображаются в немодальном виде. Диалоговое окно Найти, доступное в меню Правка приложения Visual Studio – пример немодального диалогового окна. Используйте немодальные формы для отображения часто используемых команд или сведений.

Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Чтобы изменить параметры, в меню Сервис выберите команду Импорт и экспорт параметров.Дополнительные сведения см. в разделе Параметры Visual Studio.

Чтобы отобразить форму как модальное диалоговое окно

  • Вызовите метод ShowDialog.

    В следующем примере кода показан способ отображения модального диалогового окна.

    Dim frmAbout as New Form()
    ' Display frmAbout as a modal dialog
    frmAbout.ShowDialog()
    
    //Display frmAbout as a modal dialog
    Form frmAbout = new Form();
    frmAbout.ShowDialog();
    
    Form ^ frmAbout = gcnew Form();
    //Display frmAbout as a modal dialog
    frmAbout->ShowDialog();
    

    В методе ShowDialog существует необязательный аргумент owner, который можно использовать в форме для определения отношения "главный-подчиненный". Например, когда с помощью кода в главной форме отображается диалоговое окно, в качестве значения аргумента owner диалогового окна можно передать значение Me (в Visual Basic) или this (в Visual C#), чтобы определить, что главная форма является владельцем. Это показано в следующем примере.

    Private Sub mnuAbout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuAbout.Click
       Dim f As New Form()
       f.ShowDialog(Me)
    End Sub
    
    private void mnuAbout_Click(object sender, System.EventArgs e)
    {
       Form f = new Form();
       f.ShowDialog(this);
    }
    
    private:
       void mnuAbout_Click(System::Object ^ sender,
          System::EventArgs ^ e)
       {
          Form ^ f = gcnew Form();
          f->ShowDialog(this);
       }
    

Чтобы отобразить форму как немодальное диалоговое окно

  • Вызовите метод Show.

    В следующем примере показан способ отображения диалогового окна О программе в немодальном формате.

    Dim f As New Form()
    ' Display f as a modeless dialog.
    f.Show()
    
    //Display f as a modeless dialog
    Form f= new Form();
    f.Show();
    
    Form ^ f = gcnew Form();
    //Display f as a modeless dialog
    f->Show();
    

    Примечание

    При отображении модальной формы код, следующий после метода ShowDialog, не выполняется до тех пор, пока не будет закрыто диалоговое окно.Однако при отображении немодальной формы код, следующий после метода Show, выполняется немедленно после отображения формы.

См. также

Задачи

Практическое руководство. Извлечение выборочной информации из диалогового она с помощью нескольких свойств

Пошаговое руководство. Извлечение всех сведений вместе из диалогового окна с помощью объектов

Ссылки

Общие сведения о Windows Forms

Другие ресурсы

Создание новой формы Windows Forms

Диалоговые окна в Windows Forms