HOW TO:建立並控制工具視窗
Visual Studio 中的視窗可分為兩類:文件視窗或工具視窗。文件視窗的內容可以用程式碼編輯器進行編輯,例如文字檔、HTML 檔或類別內部的程式碼。工具視窗會包含一個或多個控制項,例如按鈕、文字、下拉式方塊等。Visual Studio 整合式開發環境 (IDE) 會使用控制項執行某些工作,例如設定選項、檢視錯誤,或是編輯專案項目。像是 [輸出] 視窗、[工作清單] 和 [工具箱] 等,這些都是控制項。[工具箱] 可自由地在 IDE 內部移動或停駐於其他工具視窗,而且您可以使用 LinkedWindows 集合,以程式設計方式連結或取消連結 IDE 中的工具視窗。如需詳細資訊,請參閱HOW TO:變更視窗特性。
除了使用 Automation 操作現有的工具視窗外,您也可以使用 Windows2 集合的 CreateToolWindow2 方法建立自己的自訂工具視窗。
建立自己的自訂工具視窗後,就可以填入各種可用來執行工作的控制項。例如,您可以使用自訂工具視窗顯示特製的工具,協助您格式化程式碼、追蹤和變更變數設定,或是執行進階偵錯工作或來源分析。
建立自訂工具視窗的程序如下:
建立使用者控制項 (User Control) (使用 Windows 控制項程式庫專案)。
在表單上加入您想要的控制項 (例如按鈕、文字方塊等) 和程式碼。
將專案編譯為 DLL。
建立新的 Visual Studio 增益集專案 (或是其他專案,例如 Windows 應用程式專案)。
使用 CreateToolWindow2 方法來建立工具視窗,以便裝載 (Host) 新的使用者控制項。
叫用 CreateToolWindow2 來建立新的工具視窗之前,您應該將使用者控制項 (ControlObject) 與增益集移入相同的組件,或設定使用者控制項的所有屬性以便讓 COM 完全可見此控制項(例如,在專案的編譯選項中,核取 [註冊 COM Interop] 選項)。 如果您沒有這樣做,此控制項就無法正確封送處理,而且 CreateToolWindow2 會傳回 null 值。
除了下面的範例外,Visual Studio Automation 範例 (英文) 網站上還提供了其他各種語言的工具視窗範例以及其他程式碼範例。
注意事項 |
---|
如果您嘗試在可以看見工具視窗前,設定新工具視窗的任何可視狀態 (例如高度、寬度或位置),將會收到錯誤訊息。請在嘗試設定這類屬性之前,確認視窗是可見的。 |
注意事項 |
---|
根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。使用 [一般開發設定] 開發了這些程序。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定。 |
建立自訂工具視窗
下列範例會示範如何在 Visual Basic 和 Visual C# 中建立工具視窗。
注意事項 |
---|
下列程式碼必須在增益集中執行,不能在巨集中執行。 |
若要建立自訂工具視窗
請在 Windows 控制項程式庫專案中建立使用者控制項。您可以直接採用 "WindowsControlLibrary1" 這個預設名稱,或是在下面的程式碼中變更 asmPath 參數的名稱,但是必須確定要符合 Windows 控制項程式庫專案的名稱。
或者,您也可以在程式碼中參考現有的使用者控制項。
注意事項 |
---|
您的使用者控制項類別必須具有附加至類別定義的 System.Runtime.InteropServices.GuidAttribute。 |
建立新的增益集專案。
如需詳細資訊,請參閱 HOW TO:建立增益集。
以下列程式碼取代增益集的 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 2005\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 2005\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 中。您可以將它移動到任何位置,或是將它停駐在其他工具視窗旁。