Créer une fenêtre d’outil multi-instance

Vous pouvez programmer une fenêtre d’outil afin que plusieurs instances puissent être ouvertes simultanément. Par défaut, les fenêtres d’outils ne peuvent avoir qu’une seule instance ouverte.

Lorsque vous utilisez une fenêtre d’outil multi-instance, vous pouvez afficher simultanément plusieurs sources d’informations associées. Par exemple, vous pouvez placer un contrôle multiligne TextBox dans une fenêtre d’outil multi-instance afin que plusieurs extraits de code soient simultanément disponibles pendant une session de programmation. Par exemple, vous pouvez placer un DataGrid contrôle et une zone de liste déroulante dans une fenêtre d’outil multi-instance afin que plusieurs sources de données en temps réel puissent être suivies simultanément.

Créer une fenêtre d’outil de base (à instance unique)

  1. Créez un projet nommé MultiInstanceToolWindow à l’aide du modèle VSIX et ajoutez un modèle d’élément de fenêtre d’outil personnalisé nommé MIToolWindow.

    Remarque

    Pour plus d’informations sur la création d’une extension avec une fenêtre d’outil, consultez Créer une extension avec une fenêtre d’outil.

Créer une fenêtre outil multi-instance

  1. Ouvrez le fichier MIToolWindowPackage.cs et recherchez l’attribut ProvideToolWindow . et le MultiInstances=true paramètre, comme illustré dans l’exemple suivant :

    [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. Dans le fichier MIToolWindowCommand.cs , recherchez la ShowToolWindos() méthode. Dans cette méthode, appelez la FindToolWindow méthode et définissez son create indicateur pour false qu’elle effectue une itération dans les instances de fenêtre d’outils existantes jusqu’à ce qu’une valeur disponible id soit trouvée.

  3. Pour créer une instance de fenêtre d’outil, appelez la méthode et définissez-la FindToolWindowid sur une valeur disponible et son create indicateur truesur .

    Par défaut, la valeur du paramètre de id la FindToolWindow méthode est 0. Cette valeur crée une fenêtre d’outil à instance unique. Pour que plusieurs instances soient hébergées, chaque instance doit avoir sa propre instance unique id.

  4. Appelez la Show méthode sur l’objet IVsWindowFrame retourné par la Frame propriété de l’instance de fenêtre outil.

  5. Par défaut, la ShowToolWindow méthode créée par le modèle d’élément de fenêtre outil crée une fenêtre d’outil à instance unique. L’exemple suivant montre comment modifier la ShowToolWindow méthode pour créer plusieurs instances.

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