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)
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
Abra el archivo MIToolWindowPackage.cs y busque el
ProvideToolWindow
atributo . y elMultiInstances=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 {. . .}
En el archivo MIToolWindowCommand.cs , busque el
ShowToolWindos()
método . En este método, llame al FindToolWindow método y establezca sucreate
marca enfalse
para que recorra en iteración las instancias de la ventana de herramientas existentes hasta que se encuentre una opción disponibleid
.Para crear una instancia de ventana de herramientas, llame al FindToolWindow método y establezca su
id
en un valor disponible y sucreate
marca entrue
.De forma predeterminada, el valor del
id
parámetro del FindToolWindow método es0
. 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 únicaid
.Llame al Show método en el IVsWindowFrame objeto devuelto por la Frame propiedad de la instancia de la ventana de herramientas.
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 elShowToolWindow
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; } } }