Ajouter et supprimer des pages de propriétés

Le Concepteur de projets fournit un emplacement centralisé pour la gestion des propriétés, des paramètres et des ressources du projet dans Visual Studio. Il apparaît sous la forme d’une fenêtre unique dans l’environnement de développement intégré (IDE) de Visual Studio et contient un certain nombre de volets à droite accessibles via les onglets de gauche. Les volets (souvent appelés pages de propriétés) dans le Concepteur de projets varient selon le type de projet et la langue. Le Concepteur de projets est accessible avec la commande Propriétés dans le menu Projet .

Un sous-type de projet doit fréquemment afficher des pages de propriétés supplémentaires dans le Concepteur de projets. De même, certains sous-types de projet peuvent nécessiter la suppression des pages de propriétés intégrées. Pour ce faire, votre sous-type de projet doit implémenter l’interface IVsHierarchy et remplacer la GetProperty méthode. En substituant cette méthode et en utilisant propId un paramètre contenant l’une des valeurs de l’énumération __VSHPROPID2 , vous pouvez filtrer, ajouter ou supprimer des propriétés de projet. Par exemple, vous devrez peut-être ajouter une page aux pages de propriétés dépendantes de la configuration. Pour ce faire, vous devez filtrer les pages de propriétés dépendantes de la configuration, puis ajouter une nouvelle page à la liste existante.

Ajouter et supprimer des pages de propriétés dans le Concepteur de projets

Supprimer une page de propriétés

  1. Remplacez la GetProperty(uint itemId, int propId, out object property) méthode pour filtrer les pages de propriétés et obtenir une clsids liste.

    protected override int GetProperty(uint itemId, int propId, out object property)
    {
        //Use propId to filter configuration-independent property pages.
        switch (propId)
        {
            . . . .
    
            case (int)__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList:
                {
                    //Get a semicolon-delimited list of clsids of the configuration-independent property pages
                    ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property));
                    string propertyPagesList = ((string)property).ToUpper(CultureInfo.InvariantCulture);
                    //Remove the property page here
                    . . . .
                }
             . . . .
         }
            . . . .
        return base.GetProperty(itemId, propId, out property);
    }
    
  2. Supprimez la page Événements de build de la liste obtenue clsids .

    string buildEventsPageGuid = "{1E78F8DB-6C07-4D61-A18F-7514010ABD56}";
    int index = propertyPagesList.IndexOf(buildEventsPageGuid);
    if (index != -1)
    {
        // GUIDs are separated by ';' so if you remove the last GUID, also remove the last ';'
        int index2 = index + buildEventsPageGuid.Length + 1;
        if (index2 >= propertyPagesList.Length)
            propertyPagesList = propertyPagesList.Substring(0, index).TrimEnd(';');
        else
            propertyPagesList = propertyPagesList.Substring(0, index) + propertyPagesList.Substring(index2);
    }
    //New property value
    property = propertyPagesList;
    

Ajouter une page de propriétés

  1. Créez une page de propriétés que vous souhaitez ajouter.

    class DeployPropertyPage : Form, Microsoft.VisualStudio.OLE.Interop.IPropertyPage
    {
        . . . .
        //Summary: Return a structure describing your property page.
        public void GetPageInfo(Microsoft.VisualStudio.OLE.Interop.PROPPAGEINFO[] pPageInfo)
        {
            PROPPAGEINFO info = new PROPPAGEINFO();
            info.cb = (uint)Marshal.SizeOf(typeof(PROPPAGEINFO));
            info.dwHelpContext = 0;
            info.pszDocString = null;
            info.pszHelpFile = null;
            info.pszTitle = "Deployment";  //Assign tab name
            info.SIZE.cx = this.Size.Width;
            info.SIZE.cy = this.Size.Height;
            if (pPageInfo != null && pPageInfo.Length > 0)
                pPageInfo[0] = info;
        }
    }
    
  2. Inscrivez votre nouvelle page de propriétés.

    [MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
    
  3. Remplacez la GetProperty(uint itemId, int propId, out object property) méthode pour filtrer les pages de propriétés, obtenez une clsids liste et ajoutez une nouvelle page de propriétés.

    protected override int GetProperty(uint itemId, int propId, out object property)
    {
        //Use propId to filter configuration-dependent property pages.
        switch (propId)
        {
            . . . .
            case (int)__VSHPROPID2.VSHPROPID_CfgPropertyPagesCLSIDList:
                {
                    //Get a semicolon-delimited list of clsids of the configuration-dependent property pages.
                    ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property));
                    //Add the Deployment property page.
                    property += ';' + typeof(DeployPropertyPage).GUID.ToString("B");
                }
         }
            . . . .
        return base.GetProperty(itemId, propId, out property);
    }