如何:建立並控制工具視窗
.Visual Studio 增益集在 Visual Studio 2013 中已被取代。 您應該將增益集升級為 VSPackage 擴充功能。 如需升級的詳細資訊,請參閱 常見問題集:將增益集轉換成 VSPackage 擴充功能。
Visual Studio 中的視窗分成兩個分類:文件視窗或工具視窗。 文件視窗是可由 [程式碼編輯器] 編輯內容的視窗,例如文字檔、HTML 或類別內的程式碼。 工具視窗包含一或多個控制項,如按鈕、文字、下拉式方塊等等。 Visual Studio 整合式開發環境 (IDE) 使用控制項執行設定選項、檢視錯誤或編輯專案項目之類的工作。 其中的部分範例為 [輸出] 視窗、[工作清單] 和 [工具箱]。 [工具箱] 可以在 IDE 周圍任意移動或與其他工具視窗銜接,同時可以使用 LinkedWindows 集合以程式設計方式在 IDE 中連結或取消連結工具視窗。 如需詳細資訊,請參閱如何:變更視窗特性。
除了使用自動化來管理現有的工具視窗之外,您還可以使用 Windows2 集合的 CreateToolWindow2 方法來建立您自己的自訂工具視窗。
藉由建立您自己的自訂工具視窗,您可以在其中填入有用的控制項以執行工作。 例如,您可以使用自訂工具視窗來顯示特殊化工具,幫助您格式化程式碼、追蹤和變更變數設定,或是執行進階偵錯工作或來源分析。
建立自訂工具視窗的程序為:
建立使用者控制項 (使用 Windows 控制項程式庫專案)
在表單 (按鈕、文字方塊等等) 和程式碼上加入所需的控制項。
將專案編譯到 DLL 中。
建立新的 Visual Studio 增益集專案 (或其他專案,例如 Windows 應用程式專案)。
使用 CreateToolWindow2 方法建立工具視窗以裝載新的使用者工具。
叫用 CreateToolWindow2 以建立新的工具視窗之前,您應將使用者控制項 (ControlObject) 移至與增益集相同的組件中,或是在使用者控制項上設定所有屬性,使 COM 可以完全看見它。 (例如,核取專案編譯選項中的 [註冊 COM Interop] 選項。)如果您不執行此動作,控制項不會正確封送處理,且 CreateToolWindow2 將會傳回 null 值。
除了以下的範例之外,Visual Studio 的自動化範例網站上還有每一種語言的其他工具視窗範例以及其他程式碼範例。
注意事項 |
---|
如果您在工具視窗可見之前試圖設定新工具視窗的任何可視性狀態,如高度、寬度或位置,將會出現錯誤。請先確定該視窗可見,然後再嘗試設定這類屬性。 |
注意事項 |
---|
根據您目前使用的設定或版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中描述的不同。這些程序透由使用中的「一般開發設定」所開發。若要變更設定,請從 [工具] 功能表中選擇 [匯入] 和 [匯出] [設定] 。如需詳細資訊,請參閱Visual Studio 中的自訂開發設定。 |
建立自訂工具視窗
下列範例示範如何在 Visual Basic 和 Visual C# 中建立工具視窗。
注意事項 |
---|
下列程式碼必須在增益集中執行,不能在巨集中執行。 |
建立自訂工具視窗
在 Windows 控制項程式庫專案中建立使用者控制項。 接受預設名稱 "WindowsControlLibrary1",或是確定變更下方程式碼中的 asmPath 參數以符合 Windows 控制項程式庫專案的名稱。
或者,您可以在程式碼中參考現有的使用者控制項。
注意事項 |
---|
您的使用者控制項類別必須有 GuidAttribute 連結至類別定義。 |
建立新的增益集專案。
如需詳細資訊,請參閱 如何:建立增益集。
將增益集的 OnConnection 方法取代為下列項目:
Public Sub OnConnection(ByVal application As Object, ByVal _ connectMode As ext_ConnectMode, ByVal addInInst As Object, _ ByRef custom As Array) Implements IDTExtensibility2.OnConnection Try ' ctlProgID - the ProgID for your user control. ' asmPath - the path to your user control DLL. ' guidStr - a unique GUID for the user control. Dim ctlProgID, asmPath, guidStr As String ' Variables for the new tool window that will hold ' your user control. Dim toolWins As EnvDTE80.Windows2 Dim toolWin As EnvDTE.Window Dim objTemp As Object = Nothing _applicationObject = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) ctlProgID = "WindowsControlLibrary2.UserControl1" ' Replace the <Path to VS Project> with the path to ' the folder where you created the WindowsCotrolLibrary. ' Remove the line returns from the path before ' running the add-in. asmPath = "<Path to VS Project>\My _ Documents\Visual Studio 2013\Projects\ _ WindowsControlLibrary2\WindowsControlLibrary2\_ bin\Debug\WindowsControlLibrary2.dll" guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}" toolWins = CType(_applicationObject.Windows, Windows2) ' Create the new tool window, adding your user control. toolWin = toolWins.CreateToolWindow2(_addInInstance, _ asmPath, ctlProgID, "MyNewToolwindow", guidStr, objTemp) ' The tool window must be visible before you do anything ' with it, or you will get an error. If Not toolWin Is Nothing Then toolWin.Visible = True End If ' Uncomment the code below to set the new tool window's ' height and width, and to close it. ' MsgBox("Setting the height to 500 and width to 400...") ' toolWin.Height = 500 ' toolWin.Width = 400 ' MsgBox("Closing the tool window...") ' toolWin.Close(vsSaveChanges.vsSaveChangesNo) Catch ex As Exception MsgBox("Exception: " & ex.ToString) End Try End Sub
// Before running, add a reference to System.Windows.Forms, // using System.Windows.Forms, to the top of the class. public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { try { // ctlProgID - the ProgID for your user control. // asmPath - the path to your user control DLL. // guidStr - a unique GUID for the user control. string ctlProgID, asmPath, guidStr; // Variables for the new tool window that will hold // your user control. EnvDTE80.Windows2 toolWins; EnvDTE.Window toolWin; object objTemp = null; _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; ctlProgID = "WindowsControlLibrary2.UserControl1"; // Replace the <Path to VS Project> with the path to // the folder where you created the WindowsCotrolLibrary. // Remove the line returns from the path before // running the add-in. asmPath = @"c:\My Documents\Visual Studio 2013\Projects\ WindowsControlLibrary2\WindowsControlLibrary2\bin\ Debug\WindowsControlLibrary2.dll"; guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}"; toolWins = (Windows2)_applicationObject.Windows; // Create the new tool window, adding your user control. toolWin = toolWins.CreateToolWindow2(_addInInstance, asmPath, ctlProgID, "MyNewToolwindow", guidStr, ref objTemp); // The tool window must be visible before you do anything // with it, or you will get an error. if (toolWin != null) { toolWin.Visible = true; } // Set the new tool window's height and width, // and then close it. System.Windows.Forms.MessageBox.Show("Setting the height to 500 and width to 400..."); toolWin.Height = 500; toolWin.Width = 400; System.Windows.Forms.MessageBox.Show ("Closing the tool window..."); toolWin.Close(vsSaveChanges.vsSaveChangesNo); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("Exception: " + ex.Message); } }
附註 上述程式碼需要對 System.Windows.Forms 命名空間的參考。
變更 ctlProgID、asmPath 和 guidStr 變數的值以反映使用者控制項。
建置並執行專案。
在 [工具] 功能表上,按一下 [增益集管理員] 以啟動增益集。
您會看到新的工具視窗在 IDE 中浮動。 您可以任意將它移至任何地方,或是將它與其他工具視窗銜接。