Creare una finestra degli strumenti a istanze multipla

È possibile programmare una finestra degli strumenti in modo che più istanze di possano essere aperte contemporaneamente. Per impostazione predefinita, le finestre degli strumenti possono avere una sola istanza aperta.

Quando si usa una finestra degli strumenti a più istanze, è possibile visualizzare contemporaneamente diverse origini correlate di informazioni. Ad esempio, è possibile inserire un controllo su TextBox più righe in una finestra degli strumenti a istanze multipla in modo che diversi frammenti di codice siano disponibili simultaneamente durante una sessione di programmazione. Ad esempio, è possibile inserire un DataGrid controllo e una casella di riepilogo a discesa in una finestra degli strumenti a istanze multipla in modo che diverse origini dati in tempo reale possano essere rilevate contemporaneamente.

Creare una finestra degli strumenti di base (a istanza singola)

  1. Creare un progetto denominato MultiInstanceToolWindow usando il modello VSIX e aggiungere un modello di elemento della finestra degli strumenti personalizzato denominato MIToolWindow.

    Nota

    Per altre informazioni sulla creazione di un'estensione con una finestra degli strumenti, vedere Creare un'estensione con una finestra degli strumenti.

Creare un'istanza multipla della finestra degli strumenti

  1. Aprire il file MIToolWindowPackage.cs e trovare l'attributo ProvideToolWindow . e il MultiInstances=true parametro , come illustrato nell'esempio seguente:

    [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. Nel file MIToolWindowCommand.cs trovare il ShowToolWindos() metodo . In questo metodo chiamare il metodo e impostarne il FindToolWindowcreate flag su false in modo da scorrere le istanze della finestra degli strumenti esistenti fino a quando non viene trovato un oggetto disponibile id .

  3. Per creare un'istanza della finestra degli strumenti, chiamare il FindToolWindow metodo e impostarlo id su un valore disponibile e il relativo create flag su true.

    Per impostazione predefinita, il valore del id parametro del FindToolWindow metodo è 0. Questo valore crea una finestra degli strumenti a istanza singola. Affinché più di un'istanza sia ospitata, ogni istanza deve avere un proprio univoco id.

  4. Chiamare il Show metodo sull'oggetto IVsWindowFrame restituito dalla Frame proprietà dell'istanza della finestra degli strumenti.

  5. Per impostazione predefinita, il ShowToolWindow metodo creato dal modello di elemento della finestra degli strumenti crea una finestra degli strumenti a istanza singola. Nell'esempio seguente viene illustrato come modificare il ShowToolWindow metodo per creare più istanze.

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