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


Пошаговое руководство: Создание страницы параметров

В этом пошаговом руководстве создается 2 страницы " сервис Параметры ", простой страницы и пользовательской страницы. Простой страницы использует сетку свойств для просмотра и установки свойств и настраиваемая страница предоставляет собственный интерфейс пользователя). Управляемые границы пакетов (MPF) поддерживают оба сценария, с очень маленьким дополнительным кодом.

Чтобы сохранить эти свойства и извлечения их из файла параметров, выполните следующие шаги, а затем см. в разделе Пошаговое руководство: Создание категории параметров.

Предоставляет 2 MPF класса для помощи в создании страницы " сервис Параметры ", Package и класс DialogPage класс. Создании VSPackage, чтобы обеспечить контейнер для этих страниц, subclassing класс пакета. Каждая страница " сервис Параметры " можно создать путем наследования от класса DialogPage.

В этом пошаговом руководстве описывается создание страницы " сервис Параметры " и использовать их для отображения и параметры применения изменений. Чтобы извлечь значения параметра из при размещении VSPackage. Их можно получить программным путем из другого VSPackage с помощью автоматизации.

Обязательные компоненты

Чтобы выполнить это пошаговое руководство, необходимо устанавливать SDK для Visual Studio 2010.

Примечание

Дополнительные сведения о пакете SDK для Visual Studio см. в разделе интеграция SDK Visual Studio.Чтобы узнать, как загрузить пакет SDK для Visual Studio см. в разделе Центр разработчиков расширяемости Visual Studio на веб-сайте MSDN.

Расположения для шаблона проекта пакета Visual Studio

Шаблон проекта пакета Visual Studio могут находиться в разных местах в 3 Создать проект диалоговое окно:

  1. Под моделью расширяемости Visual Basic. Язык по умолчанию для проекта Visual Basic.

  2. Под расширяемостью c#. Язык по умолчанию для проекта c#.

  3. Под другой моделью расширяемости типов проектов. Язык по умолчанию для проекта C++.

Создание страницы сетки параметров средства

В этом разделе используется Visual Studio Шаблон проекта пакета, чтобы создать простую сетку свойств параметров сервис. Можно использовать эту сетку для отображения и изменения значения свойства.

Создание проекта VSPackage

  1. Создание новой Visual Studio Проект пакета MyToolsOptions.

    Дополнительные сведения о создании управляемого VSPackage см. в разделе Пошаговое руководство: Создание команды меню ресурсов с помощью шаблона пакета Visual Studio.

  2. На Выбрать язык программирования выберите страницу Visual Basic OR Visual c#.

  3. На Выберите параметры пакета VSPackage выберите страницу Команда меню.

  4. На Параметры команды страница, изменяет Имя команды В Получает внутренний параметр VB OR Получает внутренний CS параметра для Visual Basic OR Visual C# соответственно, установите Идентификатор команды В cmdidGetIntOpt, а затем нажмите кнопку Готово.

Создание сетки свойств параметров " сервис "

  1. Откройте файл MyToolsOptionsPackage в редакторе кода.

  2. Добавьте следующие ссылки пространства имен.

    Imports System.ComponentModel
    
    using System.ComponentModel;
    
  3. Объявите и создайте его из класса OptionPageGrid DialogPage.

    Public Class OptionPageGrid
        Inherits DialogPage
    
    public class OptionPageGrid : DialogPage
    
  4. Примените a ClassInterfaceAttribute к OptionPageGrid класс.

    <ClassInterface(ClassInterfaceType.AutoDual)>
    <CLSCompliant(False), ComVisible(True)>
    Public Class OptionPageGrid
        Inherits DialogPage
    
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [CLSCompliant(false), ComVisible(true)]
    public class OptionPageGrid : DialogPage
    

    Это создает интерфейс модели COM, который позволяет double Visual Studio Использование автоматизации GetAutomationObject для доступа к открытым членам класса.

  5. Примените a ProvideOptionPageAttribute к классу VSPackage, чтобы присвоить классу параметры категорию и назовите страницу Параметры для OptionPageGrid.

    <PackageRegistration(UseManagedResourcesOnly:=True),
    InstalledProductRegistration("#110", "#112", "1.0", IconResourceID:=400),
    ProvideMenuResource("Menus.ctmenu", 1),
    Guid(GuidList.guidMyToolsOptionsPkgString)>
    <ProvideOptionPage(GetType(OptionPageGrid),
        "My Category", "My Grid Page", 0, 0, True)>
    Public NotInheritable Class MyToolsOptionsPackage
        Inherits Package
    
    [PackageRegistration(UseManagedResourcesOnly = true),
    InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400),
    ProvideMenuResource("Menus.ctmenu", 1),
    Guid(GuidList.guidMyToolsOptionsPkgString)]
    [ProvideOptionPage(typeof(OptionPageGrid),
        "My Category", "My Grid Page", 0, 0, true)]
    public sealed class MyToolsOptionsPackage : Package
    

    Примечание

    Можно локализовать категорию путем присвоения идентификатора ресурса к свойству атрибута CategoryResourceID.

  6. Добавление OptionInteger свойство OptionPageGrid класс.

    • Примените a CategoryAttribute присвоить свойству категорию в сетке свойств.

    • Примените a DisplayNameAttribute присвоить свойству имя.

    • Примените a DescriptionAttribute присвоить свойству описание.

    <ClassInterface(ClassInterfaceType.AutoDual)>
    <CLSCompliant(False), ComVisible(True)>
    Public Class OptionPageGrid
        Inherits DialogPage
    
        Private optionValue As Integer = 256
    
        <Category("My Category")>
        <DisplayName("My Option Integer")>
        <Description("My integer option")>
        Public Property OptionInteger() As Integer 
            Get 
                Return optionValue
            End Get 
            Set(ByVal value As Integer)
                optionValue = value
            End Set 
        End Property 
    End Class
    
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [CLSCompliant(false), ComVisible(true)]
    public class OptionPageGrid : DialogPage
    {
        private int optionValue = 256;
    
        [Category("My Category")]
        [DisplayName("My Integer Option")]
        [Description("My integer option")]
        public int OptionInteger
        {
            get { return optionValue; }
            set { optionValue = value; }
        }
    }
    

    Примечание

    Реализация по умолчанию DialogPage поддерживает свойства, которые имеют соответствующие преобразователи или структуры или массивы, которые можно развернуть в свойства, которые имеют соответствующие преобразователи.Список преобразователей см. в разделе System.ComponentModel пространство имен.Примеры расширения Visual Studio управляет int" stringи System.Drawing.Size свойства.

  7. Постройте и запустите проект в режиме отладки, нажав клавишу F5. Это запуске Visual Studio в экспериментальном кусте.

    Примечание

    Обе версии Visual Studio открыть.

  8. IN Visual Studioна Сервис нажмите кнопку меню Параметры.

    Параметры будет открыто диалоговое окно.

  9. В представлении в виде дерева разверните Локальная категория затем перейдите моя страница сетки.

    Сетка параметров появится в правой области. Категория свойств мои параметрыи имя свойства МояOption Integer. Описание свойства Мой параметр integer, отображается в нижней части панели.

    Измените значение из начального значения 256 на что-нибудь еще. Нажать ОК, а затем снова откройте моя страница сетки. Можно увидеть, что новое значение сохраняется.

  10. Выход Visual Studio Exp.

Создание страницы параметров настраиваемых средств

В этом разделе создается страница " сервис Параметры " с пользовательским интерфейсом пользователя. Используйте эту страницу для отображения и изменения значения свойства.

Создание страницы параметров настраиваемых средств

  1. Откройте файл MyToolsOptionsPackage в редакторе кода.

  2. Добавьте следующий оператор пространства имен.

    Imports System.Windows.Forms
    
    using System.Windows.Forms;
    
  3. Добавление OptionPageCustom класс, но перед OptionPageGrid класс. Создайте новый класс из DialogPage.

    Public Class OptionPageCustom
        Inherits DialogPage
    
    public class OptionPageCustom : DialogPage
    
  4. На Сервис меню выберите команду Создать GUID скопировать и вставить новый идентификатор GUID с форматом реестра в коде, удаляя фигурные скобки. Добавьте свойство ClassInterfaceAttribute. Добавьте строковое свойство OptionString. Обратите внимание, что идентификатор GUID будет отличаться от идентификатора GUID в примере:

    <ClassInterface(ClassInterfaceType.AutoDual),
    Guid("42C7F4D9-200D-4fe2-A093-49AFA2DDE7F8")>
    Public Class OptionPageCustom
        Inherits DialogPage
    
        Private optionValue As String = "alpha" 
    
        Public Property OptionString() As String 
            Get 
                Return optionValue
            End Get 
            Set(ByVal value As String)
                optionValue = value
            End Set 
        End Property 
    End Class
    
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("1D9ECCF3-5D2F-4112-9B25-264596873DC9")]
    public class OptionPageCustom : DialogPage
    {
        private string optionValue = "alpha";
    
        public string OptionString
        {
            get { return optionValue; }
            set { optionValue = value; }
        }
    }
    
  5. Примените a ProvideOptionPageAttribute к классу VSPackage. Это присвоить классу параметры категорию и назовите страницу параметров.

    <PackageRegistration(UseManagedResourcesOnly:=True),
    InstalledProductRegistration("#110", "#112", "1.0", IconResourceID:=400),
    ProvideMenuResource("Menus.ctmenu", 1),
    Guid(GuidList.guidMyToolsOptionsPkgString)>
    <ProvideOptionPage(GetType(OptionPageCustom),
        "My Category", "My Custom Page", 0, 0, True)>
    <ProvideOptionPage(GetType(OptionPageGrid),
        "My Category", "My Grid Page", 0, 0, True)>
    Public NotInheritable Class MyToolsOptionsPackage
        Inherits Package
    
    [PackageRegistration(UseManagedResourcesOnly = true),
    InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400),
    ProvideMenuResource("Menus.ctmenu", 1),
    Guid(GuidList.guidMyToolsOptionsPkgString)]
    [ProvideOptionPage(typeof(OptionPageCustom),
        "My Category", "My Custom Page", 0, 0, true)]
    [ProvideOptionPage(typeof(OptionPageGrid),
        "My Category", "My Grid Page", 0, 0, true)]
    public sealed class MyToolsOptionsPackage : Package
    
  6. Добавьте в проект пользовательский элемент управления MyUserControl в проект.

    Открытие пользовательского элемента управления в представлении конструирования.

    Примечание

    Если выводится предупреждение, перестройте решение и снова откройте MyUserControl.cs.Это известная проблема.

  7. Add a TextBox мониторинг к пользовательскому элементу управления. в Свойства окно, на панели инструментов нажмите кнопку События кнопка, а затем дважды щелкает Оставить событие.

    Открывается редактор кода, чтобы указать новый обработчик событий.

  8. Добавьте открытые OptionsPage поле Initialize метод к классу элемента управления, и обновляет тело обработчика событий следующим образом:

    Public Class MyUserControl
        Friend optionsPage As OptionPageCustom
    
        Public Sub Initialize()
            TextBox1.Text = optionsPage.OptionString
        End Sub 
    
        Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As EventArgs) _
            Handles TextBox1.Leave
            optionsPage.OptionString = TextBox1.Text
        End Sub 
    End Class
    
    public partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            InitializeComponent();
        }
    
        internal OptionPageCustom optionsPage;
    
        public void Initialize()
        {
            textBox1.Text = optionsPage.OptionString;
        }
    
        private void textBox1_Leave(object sender, EventArgs e)
        {
            optionsPage.OptionString = textBox1.Text;
        }
    }
    

    optionsPage поле содержит ссылку на родительский элемент OptionPageCustom экземпляр. Initialize отображает метода OptionString в TextBox. Обработчик событий записывает текущее значение TextBox к OptionString когда фокус покидает TextBox.

  9. В файле кода пакета, добавьте переопределение для OptionPageCustom.Window свойство к классу OptionPageCustom для создания, инициализирует и возвращает экземпляр MyUserControl. Например:

    <Browsable(False)>
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
    Protected Overrides ReadOnly Property Window() As IWin32Window
        Get 
            Dim page As New MyUserControl()
            page.optionsPage = Me
            page.Initialize()
            Return page
        End Get 
    End Property
    
    [Browsable(false)]
    [DesignerSerializationVisibility(
        DesignerSerializationVisibility.Hidden)]
    protected override IWin32Window Window
    {
        get
        {
            MyUserControl page = new MyUserControl();
            page.optionsPage = this;
            page.Initialize();
            return page;
        }
    }
    
  10. Постройте и запустите проект в режиме отладки, нажав клавишу F5. Это запускает новую Visual Studio экземпляр.

    Примечание

    Обе версии Visual Studio открытие на этом этапе.

  11. в новой Visual Studio экземпляр, Сервис меню и нажмите кнопку Параметры.

    Параметры будет открыто диалоговое окно.

  12. В представлении в виде дерева в левой панели разверните раздел Локальная категория затем перейдите Моя пользовательской страницы.

  13. Измените значение OptionString из начального значения, альфа-версия, на что-нибудь еще. Нажать ОК, а затем снова откройте Моя пользовательской страницы. Можно увидеть, что новое значение сохранилось.

  14. Закройте новой Visual Studio экземпляр.

Чтобы получить доступ к параметрам из при размещении VSPackage

В этом разделе будет получено значение параметра в VSPackage этого узлы, связанная страница " сервис Параметры ". Один и тот же метод можно использовать для получения значения любого открытого свойства.

Параметр размещения доступ из VSPackage

  1. в файле пакета, замените текст сообщения MyToolsOptions.MenuItemCallback метод со следующими линиями.

    Private Sub MenuItemCallback(ByVal sender As Object, ByVal e As EventArgs)
        Dim page As OptionPageGrid = CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid)
        MessageBox.Show(String.Format(CultureInfo.CurrentCulture,
            "OptionInteger: {0}", page.OptionInteger))
    End Sub
    
    private void MenuItemCallback(object sender, EventArgs e)
    {
        OptionPageGrid page =
            (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid));
        MessageBox.Show(string.Format(CultureInfo.CurrentCulture,
            "OptionInteger: {0}", page.OptionInteger));
    }
    

    Вызовы этого кода GetDialogPage создание и восстановление OptionPageGrid экземпляр. OptionPageGrid в свою очередь вызывает LoadSettingsFromStorage загрузить его параметры, открытые свойства.

  2. Постройте и запустите проект в режиме отладки, нажав сочетание клавиш F5. Запустится новый экземпляр Visual Studio.

    Примечание

    Обе версии Visual Studio открытие на этом этапе.

  3. На Сервис меню выберите команду Получить внутренний параметр.

    Окно сообщения отображается текущее значение OptionInteger.

  4. Оставьте новой Visual Studio экземпляр.

Доступ к параметрам с помощью автоматизации

В этом разделе, можно использовать автоматизацию, чтобы получить значение параметра из любого VSPackage или надстройки. Один и тот же метод можно использовать для получения значения любого открытого свойства.

Получить доступ с помощью автоматизации, параметр

  1. Щелкните правой кнопкой мыши решение в MyToolsOptions Обозреватель решений затем добавьте новую Visual Studio Пакет AnotherPackage с именем проекта.

    Дополнительные сведения о создании управляемого VSPackage см. в разделе Пошаговое руководство: Создание команды меню ресурсов с помощью шаблона пакета Visual Studio.

  2. в Выбрать язык программирования выберите страницу Visual Basic OR Visual c#.

  3. в Выберите параметры пакета VSPackage выберите страницу Команда меню.

  4. в Параметры команды страница, изменяет Имя команды внешний "get" и нажмите кнопку Готово.

    Шаблон проекта создает управляемый AnotherPackage.

  5. Щелкните правой кнопкой мыши узел проекта и выберите команду AnotherPackage Назначить запускаемым проектом.

  6. Добавьте следующие ссылки пространства имен в файл кода VsPkg в проекте AnotherPackage:

    Imports EnvDTE
    Imports System.Windows.Forms
    
    using EnvDTE;
    using System.Windows.Forms;
    
  7. Замените текст сообщения AnotherPackage.MenuItemCallback метод со следующими линиями.

    Private Sub MenuItemCallback(ByVal sender As Object, ByVal e As EventArgs)
        Dim env As DTE = CType(GetService(GetType(DTE)), DTE)
    
        Dim props As EnvDTE.Properties = env.Properties("My Category", "My Grid Page")
    
        Dim value As Integer = CInt(props.Item("OptionInteger").Value)
        MessageBox.Show("OptionInteger: " & value.ToString())
    End Sub
    
    private void MenuItemCallback(object sender, EventArgs e)
    {
        DTE env = (DTE)GetService(typeof(DTE));
    
        EnvDTE.Properties props =
            env.get_Properties("My Category", "My Grid Page");
    
        int n = (int)props.Item("OptionInteger").Value;
        MessageBox.Show("OptionInteger: " + n);
    }
    

    Этот код вызывает службу для получения DTE объект, корневой объект Visual Studio модель автоматизации. Properties возвращает коллекцию свойств My Category.MyGridPage, которая включает все открытые свойства. Item метод выделяет OptionInteger из коллекции.

  8. Постройте и запустите проект в режиме отладки, нажав сочетание клавиш F5. Запустится новый экземпляр Visual Studio.

    Примечание

    Обе версии Visual Studio открытие на этом этапе.

  9. На Сервис меню выберите команду Получить внешний доступ.

    Окно сообщения отображается текущее значение OptionInteger.

См. также

Основные понятия

Поддержка для страницы параметров

Другие ресурсы

состояние VSPackage