Share via


HOW TO:顯示強制回應和非強制回應的 Windows Form

更新:2007 年 11 月

表單及對話方塊可以是強制回應或非強制回應的 (Modeless)。您必須先關閉或隱藏「強制回應」(Modal) 表單或對話方塊,才能繼續執行應用程式的其他部分。如需使用對話方塊的詳細資訊,請參閱使用者輸入到對話方塊

顯示重要訊息的對話方塊應該都是強制回應的。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();
    
    //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 可用來指定表單的父-子關係 (Parent-Child Relationship)。例如,如果主要表單中的程式碼會顯示對話方塊,您可以傳遞 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 =  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();
    
    //Display f as a modeless dialog
    Form f = new Form();
    f.ShowDialog(this);
    
    Form ^ f = gcnew Form();
    //Display f as a modeless dialog
    f->Show();
    
    注意事項:

    如果表單是以強制回應方式顯示,則 ShowDialog 方法之後的程式碼在關閉對話方塊之前都不會執行。但是,如果表單是以非強制回應的方式顯示的話,那麼 Show 方法之後的程式碼會在顯示表單後立即執行。

請參閱

工作

HOW TO:使用多個屬性選擇性地擷取對話方塊資訊

逐步解說:使用物件共同地擷取對話方塊資訊

參考

Windows Form 概觀

其他資源

建立新的 Windows Form

Windows Form 中的對話方塊