Comparteix a través de


Creación de una ventana de herramientas de varias instancias

Puede programar una ventana de herramientas para que varias instancias de ella se puedan abrir simultáneamente. De forma predeterminada, las ventanas de herramientas solo pueden tener abierta una instancia.

Al usar una ventana de herramientas de varias instancias, puede mostrar varios orígenes de información relacionados al mismo tiempo. Por ejemplo, podría colocar un control de varias líneas TextBox en una ventana de herramientas de varias instancias para que varios fragmentos de código estén disponibles simultáneamente durante una sesión de programación. Además, por ejemplo, podría colocar un DataGrid control y un cuadro de lista desplegable en una ventana de herramientas de varias instancias para que se pueda realizar un seguimiento simultáneo de varios orígenes de datos en tiempo real.

Creación de una ventana de herramientas básica (instancia única)

  1. Cree un proyecto denominado MultiInstanceToolWindow mediante la plantilla VSIX y agregue una plantilla de elemento de ventana de herramientas personalizada denominada MIToolWindow.

    Nota:

    Para obtener más información sobre cómo crear una extensión con una ventana de herramientas, consulte Creación de una extensión con una ventana de herramientas.

Creación de una ventana de herramientas de varias instancias

  1. Abra el archivo MIToolWindowPackage.cs y busque el ProvideToolWindow atributo . y el MultiInstances=true parámetro , como se muestra en el ejemplo siguiente:

    [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. En el archivo MIToolWindowCommand.cs , busque el ShowToolWindos() método . En este método, llame al FindToolWindow método y establezca su create marca en false para que recorra en iteración las instancias de la ventana de herramientas existentes hasta que se encuentre una opción disponible id .

  3. Para crear una instancia de ventana de herramientas, llame al FindToolWindow método y establezca su id en un valor disponible y su create marca en true.

    De forma predeterminada, el valor del id parámetro del FindToolWindow método es 0. Este valor crea una ventana de herramientas de instancia única. Para que se hospede más de una instancia, cada instancia debe tener su propia instancia única id.

  4. Llame al Show método en el IVsWindowFrame objeto devuelto por la Frame propiedad de la instancia de la ventana de herramientas.

  5. De forma predeterminada, el ShowToolWindow método creado por la plantilla de elemento de ventana de herramientas crea una ventana de herramientas de instancia única. En el ejemplo siguiente se muestra cómo modificar el ShowToolWindow método para crear varias instancias.

    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;
            }
        }
    }