Partager via


Comment : créer et contrôler des fenêtres Outil

Mise à jour : novembre 2007

Les fenêtres de Visual Studio sont réparties dans deux catégories : les fenêtres de document et les fenêtres Outil. Une fenêtre de document présente un contenu modifiable par l'éditeur de code, tel qu'un fichier texte ou HTML, ou un code dans une classe. Une fenêtre Outil contient un ou plusieurs contrôles, tels que des boutons, du texte ou des zones de liste déroulante. L'environnement de développement intégré de Visual Studio utilise des contrôles pour effectuer certaines opérations, notamment définir les options, afficher les erreurs ou modifier les éléments de projet. La fenêtre Sortie, la liste des tâches et la boîte à outils en sont quelques exemples. La Boîte à outils peut être déplacée librement autour de l'IDE ou ancrée avec d'autres fenêtres Outil, et vous pouvez utiliser la collection LinkedWindows pour lier par programme ou délier les fenêtres Outil de l'IDE. Pour plus d'informations, consultez Comment : modifier les caractéristiques d'une fenêtre.

En plus d'utiliser l'automation pour manipuler des fenêtres Outil existantes, vous pouvez créer vos propres fenêtres Outil personnalisées en utilisant la méthode CreateToolWindow2 de la collection Windows2.

Remarque :

Cette nouvelle méthode Visual Studio 2005 remplace la méthode CreateToolWindow utilisée dans Visual Studio 2002 et 2003.

En créant votre propre fenêtre Outil personnalisée, vous pouvez la doter des contrôles utiles aux différentes tâches à effectuer. Par exemple, vous pouvez utiliser une fenêtre Outil personnalisée pour afficher des outils spécialisés qui vous aideront à mettre votre code en forme, à suivre et à modifier des paramètres variables, ou à exécuter des tâches de débogage avancées ou de profilage de source.

La procédure pour créer une fenêtre Outil personnalisée est la suivante :

  • Créez un contrôle utilisateur (au moyen d'un projet Bibliothèque de contrôles Windows).

  • Ajoutez les contrôles souhaités dans un formulaire (boutons, zones de texte, et autres), ainsi que le code.

  • Compilez le projet dans une DLL.

  • Créez un projet de complément Visual Studio (ou un autre projet, tel qu'un projet d'application Windows).

  • Utilisez la méthode CreateToolWindow2 pour créer une fenêtre Outil afin d'héberger le nouveau contrôle utilisateur.

Avant d'appeler CreateToolWindow2 pour créer une fenêtre Outil, vous devez déplacer le contrôle utilisateur (ControlObject) dans le même assembly en tant que complément ou définir tous les attributs du contrôle utilisateur pour qu'il soit entièrement visible par COM. (Par exemple, contrôle de l'option Inscrire pour COM interop dans les options de compilation du projet.) Si vous n'effectuez pas cette opération, le contrôle ne marshalera pas correctement et CreateToolWindow2 retournera une valeur null.

En plus des exemples ci-dessous, des exemples de fenêtres Outil supplémentaires pour chaque langage, ainsi que d'autres exemples de code, sont présents sur le site Web des exemples Automation de Visual Studio.

Remarque :

Si vous essayez de définir chacun des états de visibilité de la nouvelle fenêtre Outil, tel que la hauteur, la largeur ou la position, avant que la fenêtre Outil ne soit visible, vous obtenez une erreur. Assurez-vous que la fenêtre est visible avant d'essayer de définir ces propriétés.

Remarque :

Selon vos paramètres actifs ou votre édition, les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles qui sont décrites dans l'aide. Ces procédures ont été développées avec les paramètres de développement généraux actifs. Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio.

Création d'une fenêtre Outil personnalisée

L'exemple suivant montre comment créer une fenêtre Outil dans Visual Basic et Visual C#.

Remarque :

Le code suivant doit être exécuté dans un complément ; il ne peut pas être exécuté dans une macro.

Pour créer une fenêtre Outil personnalisée

  1. Créez un contrôle utilisateur dans un projet Bibliothèque de contrôles Windows. Acceptez le nom par défaut "WindowsControlLibrary1" ; dans la négative, veillez à modifier le nom du paramètre asmPath dans le code ci-dessous pour qu'il corresponde au nom de votre projet Bibliothèque de contrôles Windows.

    Dans votre code, vous pouvez également référencer un contrôle utilisateur existant.

  2. Créez un projet Complément.

    Pour plus d'informations, consultez Comment : créer un complément.

  3. Remplacez la méthode OnConnection du complément par les éléments suivants :

    Public Sub OnConnection(ByVal application As Object, ByVal _
    connectMode As ext_ConnectMode, ByVal addInInst As Object, _
    ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        Try
            ' ctlProgID - the ProgID for your user control.
            ' asmPath - the path to your user control DLL.
            ' guidStr - a unique GUID for the user control.
            Dim ctlProgID, asmPath, guidStr As String
            ' Variables for the new tool window that will hold
            ' your user control.
            Dim toolWins As EnvDTE80.Windows2
            Dim toolWin As EnvDTE.Window
            Dim objTemp As Object = Nothing
    
            _applicationObject = CType(application, DTE2)
            _addInInstance = CType(addInInst, AddIn)
            ctlProgID = "WindowsControlLibrary2.UserControl1"
            ' Replace the <Path to VS Project> with the path to
            ' the folder where you created the WindowsCotrolLibrary.
            ' Remove the line returns from the path before 
            ' running the add-in.
            asmPath = "<Path to VS Project>\My _
              Documents\Visual Studio 2005\Projects\ _
              WindowsControlLibrary2\WindowsControlLibrary2\_
              bin\Debug\WindowsControlLibrary2.dll"
            guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}"
    
            toolWins = CType(_applicationObject.Windows, Windows2)
            ' Create the new tool window, adding your user control.
            toolWin = toolWins.CreateToolWindow2(_addInInstance, _
              asmPath, ctlProgID, "MyNewToolwindow", guidStr, objTemp)
            ' The tool window must be visible before you do anything 
            ' with it, or you will get an error.
            If Not toolWins Is Nothing Then
                toolWin.Visible = True
            End If
               ' Uncomment the code below to set the new tool window's
               ' height and width, and to close it.
            ' MsgBox("Setting the height to 500 and width to 400...")
            ' toolWin.Height = 500
            ' toolWin.Width = 400
            ' MsgBox("Closing the tool window...")
            ' toolWin.Close(vsSaveChanges.vsSaveChangesNo)
    
        Catch ex As Exception
            MsgBox("Exception: " & ex.ToString)
        End Try
    End Sub
    
    // Before running, add a reference to System.Windows.Forms, 
    // using System.Windows.Forms, to the top of the class.
    public void OnConnection(object application, 
    ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        try
        {
            // ctlProgID - the ProgID for your user control.
            // asmPath - the path to your user control DLL.
            // guidStr - a unique GUID for the user control.
            string ctlProgID, asmPath, guidStr;
            // Variables for the new tool window that will hold
            // your user control.
            EnvDTE80.Windows2 toolWins;
            EnvDTE.Window toolWin;
            object objTemp = null;
    
            _applicationObject = (DTE2)application;
            _addInInstance = (AddIn)addInInst;
            ctlProgID = "WindowsControlLibrary2.UserControl1";
            // Replace the <Path to VS Project> with the path to
            // the folder where you created the WindowsCotrolLibrary.
            // Remove the line returns from the path before 
            // running the add-in.
            asmPath = @"c:\My Documents\Visual Studio 2005\Projects\
              WindowsControlLibrary2\WindowsControlLibrary2\bin\
              Debug\WindowsControlLibrary2.dll";
            guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}";
    
            toolWins = (Windows2)_applicationObject.Windows;
            // Create the new tool window, adding your user control.
            toolWin = toolWins.CreateToolWindow2(_addInInstance, 
              asmPath, ctlProgID, "MyNewToolwindow", guidStr, 
              ref objTemp);
            // The tool window must be visible before you do anything 
            // with it, or you will get an error.
            if (toolWins == null)
            {
                toolWin.Visible = true;
            }
            // Uncomment the code below to set the new tool window's
            // height and width, and to close it.
            // System.Windows.Forms.MessageBox.Show("Setting the height 
            // to 500 and width to 400...");
            // toolWin.Height = 500;
            // toolWin.Width = 400;
            // System.Windows.Forms.MessageBox.Show
            //   ("Closing the tool window...");
            // toolWin.Close(vsSaveChanges.vsSaveChangesNo);
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Exception: " 
              + ex.Message);
        }
    }
    
  4. Générez et exécutez le projet.

  5. Dans le menu Outils, cliquez sur Gestionnaire de compléments pour activer le complément.

La nouvelle fenêtre Outil flotte dans l'IDE. Vous pouvez la déplacer vers n'importe quel emplacement ou l'ancrer à d'autres fenêtres Outil.

Voir aussi

Tâches

Comment : modifier les caractéristiques d'une fenêtre

Comment : créer un complément

Procédure pas à pas : création d'un Assistant

Concepts

Contrôle des paramètres de la boîte de dialogue Options

Graphique Modèle d'objet Automation

Autres ressources

Création et contrôle de fenêtres d'environnement

Création de compléments et d'Assistants

Guide de référence de l'extensibilité et de l'automation