逐步解說:在設計階段偵錯自訂的 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。
建立控制項程式庫專案
在方案中新增 Windows 控制項程式庫專案。
將新的 UserControl 項目新增至 DebugControlLibrary 專案。 將其命名為 DebugControl。
在 [方案總管] 中,刪除具有 UserControl1 基底名稱的程式碼檔案,以刪除專案的預設控制項。
建置方案。
檢查點
此時,您將能夠在 [工具箱] 中看到您的自訂控制項。
若要檢查進度,請尋找名為 DebugControlLibrary 元件 的新索引標籤,然後按一下以選取它。 當其開啟時,您會看到控制項列為 DebugControl,而其旁邊有預設圖示。
將屬性新增至自訂控制項
為了示範自訂控制項的程式碼是在設計階段執行,您將新增屬性,並在實作屬性的程式碼中設定中斷點。
在程式碼編輯器中開啟 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; } }
建置方案。
將自訂控制項新增至主機表單
若要對自訂控制項的設計階段行為進行偵錯,您會將自訂控制項類別的執行個體放在主機表單上。
在 "DebuggingExample" 專案中,開啟 Windows Form 設計工具中的 Form1。
在 [工具箱] 中,開啟 [DebugControlLibrary 元件] 索引標籤,然後將 DebugControl 執行個體拖曳到表單上。
在 [屬性] 視窗中尋找
DemoString
自訂屬性。 請注意,您可以變更其值,就像任何其他屬性一樣。 另請注意,選取DemoString
屬性時,屬性的描述字串會出現在 [屬性] 視窗底部。
設定專案以進行設計階段偵錯
若要偵錯自訂控制項的設計階段行為,您將會偵錯執行自訂控制項程式碼的個別 Visual Studio 執行個體。
以滑鼠右鍵按一下 [方案總管] 中的 [DebugControlLibrary] 專案,然後選取 [屬性]。
在 [DebugControlLibrary] 屬性工作表中,選取 [偵錯] 索引標籤。
在 [開始動作] 區段中,選取 [啟動外部程式]。 您將針對個別的 Visual Studio 執行個體進行偵錯,因此,請按下省略號 (Visual Studio 的 [屬性] 視窗中的省略符號按鈕 (...)) 按鈕來瀏覽 Visual Studio IDE。 可執行檔的名稱是 devenv.exe,如果您已安裝至預設位置,則其路徑為 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<版本>\Common7\IDE。
選取 [確定] 關閉對話方塊。
以滑鼠右鍵按一下 [DebugControlLibrary] 專案,然後選取 [設定為啟始專案] 以啟用此偵錯設定。
在設計階段對自訂控制項進行偵錯
現在您已準備好在自訂控制項於設計模式中執行時對其進行偵錯。 當您啟動偵錯工作階段時,將會建立新的 Visual Studio 執行個體,且您將使用該執行個體來載入 “DebuggingExample” 方案。 當您在表單設計師中開啟 Form1 時,將會建立自訂控制項的執行個體,並將開始執行。
在程式碼編輯器中開啟 DebugControl 來源檔案,並在
DemoString
屬性的Set
存取子上放置中斷點。按 F5 以啟動偵錯工作階段。 Visual Studio 的新執行個體隨即建立。 您可以透過兩種方式區分執行個體:
偵錯執行個體在其標題列中有 [執行中] 一字
偵錯執行個體在其 [偵錯] 工具列上已停用 [開始] 按鈕
您的中斷點會在偵錯執行個體中設定。
在 Visual Studio 的新執行個體中,開啟 “DebuggingExample” 方案。 您可以從 [檔案] 功能表中選取 [最近使用的專案],輕鬆找到此方案。 "DebuggingExample.sln" 方案檔將列為最近使用的檔案。
重要
如果您要偵錯 .NET 6 或更新版本的 Windows Forms 專案,請勿載入專案,而是改為使用 Visual Studio 的這個執行個體,將偵錯工具附加至 DesignToolsServer.exe 處理序。 選取 [偵錯]>[附加至處理序] 功能表項目。 在處理序清單中尋找 DesignToolsServer.exe,然後按 [附加]。 如需詳細資訊,請參閱設計工具自 .NET Framework 以來的變更。
在表單設計師中開啟 Form1,然後選取 [DebugControl] 控制項。
變更
DemoString
屬性的值。 當您認可變更時,Visual Studio 的偵錯執行個體會在中斷點取得焦點和執行停止。 您可以單一步驟執行屬性存取子,就像任何其他程式碼一樣。若要停止偵錯,請結束 Visual Studio 裝載的執行個體,或選取偵錯執行個體中的 [停止偵錯] 按鈕。
下一步
現在您可以在設計階段對自訂控制項進行偵錯,因此有許多可能性可以擴充控制項與 Visual Studio IDE 的互動。
您可以使用 Component 類別的 DesignMode 屬性來撰寫只會在設計階段執行的程式碼。 如需詳細資訊,請參閱DesignMode。
您可以將數個屬性套用至控制項屬性,以操作自訂控制項與設計工具的互動。 您可以在 System.ComponentModel 命名空間中找到這些屬性。
您可以撰寫自訂控制項的自訂設計工具。 這可讓您使用 Visual Studio 所公開的可延伸設計工具基礎結構,從而完全控制設計體驗。 如需詳細資料,請參閱逐步解說:建立利用 Visual Studio 設計階段功能的 Windows Forms 控制項。