逐步解說:在設計階段偵錯自訂的 Windows Forms 控制項

當您建立自訂控制項時,通常會發現必須偵錯其設計階段行為。 如果您要為自訂控制項製作自訂設計工具,則特別是如此。 如需詳細資料,請參閱逐步解說:建立利用 Visual Studio 設計階段功能的 Windows Forms 控制項

您可以使用 Visual Studio 對自訂控制項進行偵錯,就像偵錯任何其他 .NET Framework 類別一樣。 差別在於,您將針對執行自訂控制項程式碼的 Visual Studio 個別執行個體進行偵錯。

重要

本文主要適用於使用 .NET Framework 的 Windows Forms 傳統同內含式設計工具。 程序可能不直接適用或完全相容於以 .NET 為目標 (而非 .NET Framework) 的專案。

對於 .NET Framework 專案,只有可以使用平台目標設定 [任何] 或 [x64] 進行編譯的專案,才能在設計工具中完整支援。 使用 ActiveX、COM 或其他 32 位元元件的專案可能會有相容性問題。 目前處於預覽狀態的 Out-Of_Process Framework Designer 解決了許多相容性問題。 不過,設計階段功能可能無法如同 64 位元內含式設計工具一般運作。 若要啟用跨處理序 Framework Designer,請瀏覽至 [工具]>[選項]>[環境]>[預覽功能]

如需跨處理序設計工具的詳細資訊,請參閱設計工具自 .NET Framework 以來的變更

建立專案

第一個步驟是建立應用程式專案。 您將使用此專案來建置裝載自訂控制項的應用程式。

在 Visual Studio 中,建立 Windows 應用程式專案,並將其命名為 DebuggingExample

建立控制項程式庫專案

  1. 在方案中新增 Windows 控制項程式庫專案。

  2. 將新的 UserControl 項目新增至 DebugControlLibrary 專案。 將其命名為 DebugControl

  3. 在 [方案總管] 中,刪除具有 UserControl1 基底名稱的程式碼檔案,以刪除專案的預設控制項。

  4. 建置方案。

檢查點

此時,您將能夠在 [工具箱] 中看到您的自訂控制項。

若要檢查進度,請尋找名為 DebugControlLibrary 元件 的新索引標籤,然後按一下以選取它。 當其開啟時,您會看到控制項列為 DebugControl,而其旁邊有預設圖示。

將屬性新增至自訂控制項

為了示範自訂控制項的程式碼是在設計階段執行,您將新增屬性,並在實作屬性的程式碼中設定中斷點。

  1. 程式碼編輯器中開啟 DebugControl。 將下列程式碼新增至類別定義:

    Private demoStringValue As String = Nothing
    <BrowsableAttribute(true)>
    Public Property DemoString() As String
    
        Get
            Return Me.demoStringValue
        End Get
    
        Set(ByVal value As String)
            Me.demoStringValue = value
        End Set
    
    End Property
    
    private string demoStringValue = null;
    [Browsable(true)]
    public string DemoString
    {
        get
        {
            return this.demoStringValue;
        }
        set
        {
            demoStringValue = value;
        }
    }
    
  2. 建置方案。

將自訂控制項新增至主機表單

若要對自訂控制項的設計階段行為進行偵錯,您會將自訂控制項類別的執行個體放在主機表單上。

  1. 在 "DebuggingExample" 專案中,開啟 Windows Form 設計工具中的 Form1。

  2. 在 [工具箱] 中,開啟 [DebugControlLibrary 元件] 索引標籤,然後將 DebugControl 執行個體拖曳到表單上。

  3. 在 [屬性] 視窗中尋找 DemoString 自訂屬性。 請注意,您可以變更其值,就像任何其他屬性一樣。 另請注意,選取 DemoString 屬性時,屬性的描述字串會出現在 [屬性] 視窗底部。

設定專案以進行設計階段偵錯

若要偵錯自訂控制項的設計階段行為,您將會偵錯執行自訂控制項程式碼的個別 Visual Studio 執行個體。

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [DebugControlLibrary] 專案,然後選取 [屬性]

  2. 在 [DebugControlLibrary] 屬性工作表中,選取 [偵錯] 索引標籤。

    在 [開始動作] 區段中,選取 [啟動外部程式]。 您將針對個別的 Visual Studio 執行個體進行偵錯,因此,請按下省略號 (Visual Studio 的 [屬性] 視窗中的省略符號按鈕 (...)) 按鈕來瀏覽 Visual Studio IDE。 可執行檔的名稱是 devenv.exe,如果您已安裝至預設位置,則其路徑為 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<版本>\Common7\IDE

  3. 選取 [確定] 關閉對話方塊。

  4. 以滑鼠右鍵按一下 [DebugControlLibrary] 專案,然後選取 [設定為啟始專案] 以啟用此偵錯設定。

在設計階段對自訂控制項進行偵錯

現在您已準備好在自訂控制項於設計模式中執行時對其進行偵錯。 當您啟動偵錯工作階段時,將會建立新的 Visual Studio 執行個體,且您將使用該執行個體來載入 “DebuggingExample” 方案。 當您在表單設計師中開啟 Form1 時,將會建立自訂控制項的執行個體,並將開始執行。

  1. 程式碼編輯器中開啟 DebugControl 來源檔案,並在 DemoString 屬性的 Set 存取子上放置中斷點。

  2. F5 以啟動偵錯工作階段。 Visual Studio 的新執行個體隨即建立。 您可以透過兩種方式區分執行個體:

    • 偵錯執行個體在其標題列中有 [執行中] 一字

    • 偵錯執行個體在其 [偵錯] 工具列上已停用 [開始] 按鈕

    您的中斷點會在偵錯執行個體中設定。

  3. 在 Visual Studio 的新執行個體中,開啟 “DebuggingExample” 方案。 您可以從 [檔案] 功能表中選取 [最近使用的專案],輕鬆找到此方案。 "DebuggingExample.sln" 方案檔將列為最近使用的檔案。

    重要

    如果您要偵錯 .NET 6 或更新版本的 Windows Forms 專案,請勿載入專案,而是改為使用 Visual Studio 的這個執行個體,將偵錯工具附加至 DesignToolsServer.exe 處理序。 選取 [偵錯]>[附加至處理序] 功能表項目。 在處理序清單中尋找 DesignToolsServer.exe,然後按 [附加]。 如需詳細資訊,請參閱設計工具自 .NET Framework 以來的變更

  4. 表單設計師中開啟 Form1,然後選取 [DebugControl] 控制項。

  5. 變更 DemoString 屬性的值。 當您認可變更時,Visual Studio 的偵錯執行個體會在中斷點取得焦點和執行停止。 您可以單一步驟執行屬性存取子,就像任何其他程式碼一樣。

  6. 若要停止偵錯,請結束 Visual Studio 裝載的執行個體,或選取偵錯執行個體中的 [停止偵錯] 按鈕。

下一步

現在您可以在設計階段對自訂控制項進行偵錯,因此有許多可能性可以擴充控制項與 Visual Studio IDE 的互動。

另請參閱