新闻  |   论坛  |   博客  |   在线研讨会
show()与showdialog()区别
luker | 2017-01-12 13:45:26    阅读:209   发布文章

窗体和对话框要么是有模式的,要么是无模式的。“模式”窗体或对话框必须关闭或隐藏,然后您才能继续使用应用程序的其余部分。有关使用对话框的更多信息,请参见对话框中的用户输入

显示重要消息的对话框应始终是有模式的。模式对话框的一个示例是 Visual Studio 中的“关于”对话框。MessageBox 是您可以使用的一个模式窗体。

“无模式”窗体让您在此窗体与另一窗体之间变换焦点,而不必关闭初始窗体。用户在该窗体显示的同时可继续在任何应用程序的其他位置工作。

无模式窗体的编程难度更大,因为用户访问这些窗体的顺序可能无法预知。不论用户执行什么操作,都必须使该应用程序的状态保持一致。工具窗口经常以无模式方式显示。无模式对话框的一个示例是 Visual Studio 中可从“编辑”菜单访问的“查找”对话框。使用无模式窗体可显示常用的命令或信息。

将窗体显示为有模式对话框

  • 调用 ShowDialog 方法。

下列示例显示如何有模式地显示对话框。

' Visual Basic

Dim frmAbout as New Form()

' Display frmAbout as a modal dialog

frmAbout.ShowDialog()

 

// C#//Display frmAbout as a modal dialogForm frmAbout = new Form();frmAbout.ShowDialog();// C++Form * frmAbout = new Form();//Display frmAbout as a modal dialogfrmAbout->ShowDialog();

Form.ShowDialog 方法有一个可选参数 owner,该参数可用于指定窗体的父子关系。例如,当主窗体中的代码显示对话框时,可将 Me(在 Visual Basic 中)或 This(在 C# 中)作为该对话框的所有者传递,以使您的主窗体成为所有者,如以下代码所示。

' Visual BasicPrivate Sub mnuAbout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuAbout.ClickDim f As New Form()f.ShowDialog(Me)End Sub// C#private void mnuAbout_Click(object sender, System.EventArgs e){

   Form f = new Form();

   f.ShowDialog(this);

}// C++

private:

   System::VoidmnuAbout_Click(System::Object *  sender,

      System::EventArgs *  e)

   {

      Form * f = new Form();

      f->ShowDialog(this);

   }

将窗体显示为无模式对话框

  • 调用 Show 方法。

下列示例显示如何以无模式格式显示“关于”对话框。

' Visual Basic

Dim f As New Form()

' Display frmAbout as a modeless dialog.

f.Show()

 

// C#//Display frmAbout as a modeless dialogForm f= new Form();f.Show();// C++Form * f = new Form();//Display f as a modeless dialogf->Show();

注意   如果窗体显示为有模式,则在关闭该对话框之前,不执行 ShowDialog 方法后面的代码。但是,当窗体显示为无模式时,那么该窗体显示之后,会立刻执行 Show 方法后面的代码。

 

参与讨论
登录后参与讨论
推荐文章
最近访客