Поделиться через


Добавление и удаление страниц свойств

Конструктор проектов предоставляет централизованное расположение для управления свойствами проекта, параметрами и ресурсами в Visual Studio. Он отображается как одно окно в интегрированной среде разработки Visual Studio (IDE) и содержит ряд панелей справа, к которым обращаются вкладки слева. Области (часто называемые страницами свойств) в конструкторе проектов зависят от типа проекта и языка. Конструктор проектов можно получить с помощью команды "Свойства " в меню "Проект ".

Подтип проекта часто должен отображать дополнительные страницы свойств в конструкторе проектов. Аналогичным образом, некоторым подтипам проекта может потребоваться удалить встроенные страницы свойств. Для этого подтип проекта должен реализовать IVsHierarchy интерфейс и переопределить GetProperty метод. Переопределив этот метод и используя propId параметр, содержащий одно из значений __VSHPROPID2 перечисления, можно фильтровать, добавлять или удалять свойства проекта. Например, может потребоваться добавить страницу на страницы свойств, зависящих от конфигурации. Для этого необходимо отфильтровать страницы свойств, зависящие от конфигурации, а затем добавить новую страницу в существующий список.

Добавление и удаление страниц свойств в конструкторе проектов

Удаление страницы свойств

  1. Переопределите GetProperty(uint itemId, int propId, out object property) метод для фильтрации страниц свойств и получения clsids списка.

    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. Удалите страницу "События сборки" из полученного 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;
    

Добавление страницы свойств

  1. Создайте страницу свойств, которую нужно добавить.

    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. Зарегистрируйте страницу нового свойства.

    [MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
    
  3. Переопределите GetProperty(uint itemId, int propId, out object property) метод для фильтрации страниц свойств, получения clsids списка и добавления новой страницы свойств.

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