如何:显示有模式和无模式 Windows 窗体
窗体和对话框要么是有模式的,要么是无模式的。 “模式”窗体或对话框必须关闭或隐藏,然后您才能继续使用应用程序的其余部分。 有关使用对话框的更多信息,请参见 对话框的用户输入。
显示重要消息的对话框应始终是有模式的。 Visual Studio 中的**“关于”**对话框是一个有模式的对话框的示例。 MessageBox 是一个可供您使用的有模式的窗体。
“无模式”窗体让您在此窗体与另一窗体之间变换焦点,而不必关闭初始窗体。 用户在该窗体显示的同时可继续在任何应用程序的其他位置工作。
无模式窗体的编程难度更大,因为用户访问这些窗体的顺序可能无法预知。 不论用户执行什么操作,都必须使该应用程序的状态保持一致。 工具窗口经常以无模式方式显示。 无模式对话框的一个示例是 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,该参数可用于指定窗体的父子关系。 例如,当主窗体中的代码显示对话框时,可将 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 方法后面的代码。