共用方式為


建立多執行個體工具視窗

您可以透過程式設計工具視窗,以便同時開啟多個執行個體。 根據預設,工具視窗只能開啟一個執行個體。

當您使用多執行個體工具視窗時,可以同時顯示數個相關的資訊來源。 例如,您可以將多行 TextBox 控制項放在多執行個體工具視窗中,以便在程式設計工作階段期間同時提供數個程式碼片段。 此外,例如,您可以將 DataGrid 控制項和下拉式清單方塊放在多執行個體工具視窗中,以便同時追蹤數個即時資料來源。

建立基本 (單一執行個體) 工具視窗

  1. 使用 VSIX 範本建立名為 MultiInstanceToolWindow 的專案,並新增名為 MIToolWindow 的自訂工具視窗項目範本。

    注意

    如需使用工具視窗建立延伸模組的詳細資訊,請參閱使用工具視窗建立延伸模組

為工具視窗建立多執行個體

  1. 開啟 MIToolWindowPackage.cs 檔案並尋找 ProvideToolWindow 屬性 和 MultiInstances=true 參數,如下列範例所示:

    [PackageRegistration(UseManagedResourcesOnly = true)]
        [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About
        [ProvideMenuResource("Menus.ctmenu", 1)]
        [ProvideToolWindow(typeof(MultiInstanceToolWindow.MIToolWindow), MultiInstances = true)]
        [Guid(MIToolWindowPackage.PackageGuidString)]
        public sealed class MIToolWindowPackage : Package
    {. . .}
    
  2. 在 MIToolWindowCommand.cs 檔案中,尋找 ShowToolWindos() 方法。 在此方法中,呼叫 FindToolWindow 方法並將其 create 旗標設定為 false,以便逐一查看現有的工具視窗執行個體,直到找到可用的 id 為止。

  3. 若要建立工具視窗執行個體,請呼叫 FindToolWindow 方法,並將其 id 設定為可用的值,將其 create 旗標設定為 true

    根據預設,FindToolWindow 方法的 id 參數值為 0。 此值會建立單一執行個體工具視窗。 若要裝載多個執行個體,每個執行個體都必須有自己的唯一 id

  4. 在工具視窗執行個體的 Frame 屬性所傳回的 IVsWindowFrame 物件上呼叫 Show 方法。

  5. 根據預設,工具視窗專案範本所建立的 ShowToolWindow 方法會建立單一執行個體工具視窗。 下列範例說明如何修改 ShowToolWindow 方法以建立多個執行個體。

    private void ShowToolWindow(object sender, EventArgs e)
    {
        for (int i = 0; i < 10; i++)
        {
            ToolWindowPane window = this.package.FindToolWindow(typeof(MIToolWindow), i, false);
            if (window == null)
            {
                // Create the window with the first free ID.
                window = (ToolWindowPane)this.package.FindToolWindow(typeof(MIToolWindow), i, true);
                if ((null == window) || (null == window.Frame))
                {
                    throw new NotSupportedException("Cannot create tool window");
                }
    
            IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
            Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show());
            break;
            }
        }
    }