Opções e páginas de opções

Clicar em Opções no menu Ferramentas abre a caixa de diálogo Opções. As opções nessa caixa de diálogo são coletivamente chamadas de páginas de opções. O controle de árvore no painel de navegação inclui categorias de opções e cada categoria tem páginas de opções. Quando você seleciona uma página, suas opções aparecem no painel direito. Essas páginas permitem alterar os valores das opções que determinam o estado de um VSPackage.

Suporte para páginas de opções

A Package classe fornece suporte para a criação de páginas de opções e categorias de opções. A DialogPage classe implementa uma página de opções.

A implementação padrão de oferece suas propriedades públicas a um usuário em uma grade genérica de DialogPage propriedades. Você pode personalizar esse comportamento substituindo vários métodos na página para criar uma página de opções personalizadas que tenha sua própria interface do usuário (UI). Para obter mais informações, consulte Criando uma página de opções.

A DialogPage classe implementa , que fornece persistência para páginas de IProfileManageropções e também para configurações do usuário. As implementações padrão dos métodos e persistem alterações de LoadSettingsFromStorage propriedade em uma seção de usuário do Registro se a propriedade pode ser convertida de e SaveSettingsToStorage para uma cadeia de caracteres.

Caminho do Registro da Página de Opções

Por padrão, o caminho do Registro das propriedades gerenciadas por uma página de opções é determinado pela combinação UserRegistryRootde , a palavra DialogPage e o nome do tipo da classe de página de opções. Por exemplo, uma classe de página de opções pode ser definida da seguinte maneira.

namespace Company.OptionsPage
{
    public class OptionsPageGeneral : DialogPage
    {
    }
}

Se o UserRegistryRoot for HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp, os pares de nome e valor da propriedade serão subchaves de HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp\DialogPage\Company.OptionsPage.OptionsPageGeneral.

O caminho do Registro da própria página de opções é determinado pela combinação ApplicationRegistryRootde , a palavra, ToolsOptionsPages e a categoria e o nome da página de opções. Por exemplo, se a página Opções personalizadas tiver a categoria, Minhas Páginas de Opções e HKEY_LOCAL_MACHINE ApplicationRegistryRoot \SOFTWARE\Microsoft\VisualStudio\8.0Exp, a página de opções terá a chave do Registro, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\ToolsOptionsPages\My Option Pages\Custom.

Ferramentas/Opções Atributos e layout da página

O ProvideOptionPageAttribute atributo determina o agrupamento de páginas de opções personalizadas em categorias na árvore de navegação da caixa de diálogo Opções . O ProvideOptionPageAttribute atributo associa uma página de opções ao VSPackage que fornece a interface. Considere o seguinte fragmento de código :

[ProvideOptionPage(typeof(OptionsPageGeneral),"My Option Pages", "General", 101, 106, true)]
[ProvideOptionPage(typeof(OptionsPageCustom), "My Option Pages", "Custom", 101, 107, true)]
[Guid("B0002DC2-56EE-4931-93F7-70D6E9863940")]
public class MyPackage : Package

Isso declara que MyPackage fornece duas páginas de opções, OptionsPageGeneral e OptionsPageCustom. Na caixa de diálogo Opções, ambas as páginas de opções aparecem na categoria Minhas Páginas de Opções como Geral e Personalizada, respectivamente.

Atributos de opção e layout

A interface do usuário (UI) que a página fornece determina a aparência das opções em uma página de opções personalizadas. O layout, a rotulagem e a descrição das opções em uma página de opções genéricas são determinados pelos seguintes atributos:

  • CategoryAttribute determina a categoria da opção.

  • DisplayNameAttribute Determina o nome para exibição da opção.

  • DescriptionAttribute determina a descrição da opção.

    Observação

    Atributos equivalentes, SRCategory, LocDisplayName e SRDescription, usam recursos de cadeia de caracteres para localização e são definidos no exemplo de projeto gerenciado.

    Considere o seguinte fragmento de código :

    [Category("My Options")]
    [DisplayName("Integer Option")]
    [Description("My integer option")]
    public int OptionInteger { get; set; }
    

A opção OptionInteger aparece na página de opções como Integer Option na categoria My Options . Se a opção estiver selecionada, a descrição, opção Meu inteiro, aparecerá na caixa de descrição.

Acessando páginas de opções de outro VSPackage

Um VSPackage que hospeda e gerencia uma página de opções pode ser acessado programaticamente de outro VSPackage usando o modelo de automação. Por exemplo, no código a seguir, um VSPackage é registrado como hospedagem de uma página de opção.

[ProvideOptionPage(typeof(MyOptionPage), "My Category", "My Grid Page", 0, 0, true)]
[Guid("6bb6942e-014c-489e-a612-a935680f703d")]
public sealed class MyToolsOptions : Package

O fragmento de código a seguir obtém o valor de OptionInteger de MyOptionPage:

DTE dte = (DTE)GetService(typeof(DTE));
EnvDTE.Properties props = dte.get_Properties("My Category", "My Grid Page");
int n = (int)props.Item("OptionInteger").Value;

Quando o atributo registra uma página de opções, a página é registrada sob a chave AutomationProperties se o ProvideOptionPageAttributeSupportsAutomation argumento do atributo for true. A automação examina essa entrada do Registro para localizar o VSPackage associado e, em seguida, a automação acessa a propriedade por meio da página de opções hospedadas, neste caso, Minha Página de Grade.

O caminho do Registro da propriedade de automação é determinado pela combinação ApplicationRegistryRootde , a palavra, AutomationProperties e a categoria e o nome da página de opções. Por exemplo, se a página de opções tiver a categoria Minha Categoria, o nome Minha Página de Grade e o ApplicationRegistryRoot, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp, a propriedade de automação terá a chave do Registro, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\AutomationProperties\My Category\My Grid Page.

Observação

O nome canônico, My Category.My Grid Page, é o valor da subchave Name dessa chave.