Créer des pages d’options

Dans l’infrastructure de package managé Visual Studio, les classes dérivées de l’extension de DialogPage l’IDE Visual Studio en ajoutant des pages Options dans le menu Outils .

Un objet implémentant une page d’option Outils donnée est associé à des VSPackages spécifiques par l’objetProvideOptionPageAttribute.

Étant donné que l’environnement instancie l’objet implémentant une page Options d’outils particulière lorsque cette page particulière est affichée par l’IDE :

  • Une page d’option Outils doit être implémentée sur son propre objet, et non sur l’objet implémentant un VSPackage.

  • Un objet ne peut pas implémenter plusieurs pages Options d’outils.

Inscrire en tant que fournisseur de pages Options d’outils

Un VSPackage prenant en charge la configuration utilisateur via des pages Options d’outils indique les objets fournissant ces pages Options d’outils en appliquant des instances d’application ProvideOptionPageAttribute à l’implémentation Package .

Il doit y avoir une instance de ProvideOptionPageAttribute chaque DialogPagetype dérivé qui implémente une page Options d’outils.

Chaque instance d’utilise ProvideOptionPageAttribute le type qui implémente la page Options des outils, les chaînes qui contiennent la catégorie et la sous-catégorie utilisées pour identifier une page Options d’outils et les informations de ressource pour inscrire le type en fournissant une page Options d’outils.

État de la page Options des outils persistants

Si une implémentation de page Options d’outils est inscrite avec la prise en charge d’Automation activée, l’IDE conserve l’état de la page ainsi que toutes les autres pages Options d’outils.

Un VSPackage peut gérer sa propre persistance à l’aide ProvideProfileAttributede . Une seule ou l’autre méthode de persistance doit être utilisée.

Implémenter la classe DialogPage

Un objet fournissant l’implémentation d’un VSPackage d’un DialogPagetype dérivé peut tirer parti des fonctionnalités héritées suivantes :

  • Fenêtre d’interface utilisateur par défaut.

  • Mécanisme de persistance par défaut disponible s’il ProvideProfileAttribute est appliqué à la classe ou si la SupportsProfiles propriété est définie true pour celle ProvideOptionPageAttribute appliquée à la classe.

  • Prise en charge de l’automatisation.

    La configuration minimale requise pour un objet implémentant une page Options d’outils est DialogPage l’ajout de propriétés publiques.

    Si la classe est correctement inscrite en tant que fournisseur de pages Options d’outils, ses propriétés publiques sont disponibles dans la section Options du menu Outils sous la forme d’une grille de propriétés.

    Toutes ces fonctionnalités par défaut peuvent être remplacées. Par exemple, pour créer une interface utilisateur plus sophistiquée, il suffit de remplacer l’implémentation par défaut de Window.

Exemple

Ce qui suit est une implémentation simple « Hello World » d’une page d’options. L’ajout du code suivant à un projet par défaut créé par le modèle de package Visual Studio avec l’option Commande de menu sélectionnée illustre correctement les fonctionnalités de page d’option.

Description

La classe suivante définit une page d’options « Hello World » minimale. Quand il est ouvert, l’utilisateur peut définir la propriété publique HelloWorld dans une grille de propriétés.

Code

using System;
using Microsoft.VisualStudio.Shell;

namespace Company.UIUserSettingsToolsOptionsPages
{
    class HelloWorldOptions : DialogPage
    {
        bool helloWorld = true;
        public bool HelloWorld
        {
            get { return helloWorld; }
            set { helloWorld = value; }
        }
    }
}
Imports System
Imports Microsoft.VisualStudio.Shell

Namespace Company.UIUserSettingsToolsOptionsPages
    Class HelloWorldOptions
        Inherits DialogPage
        Private m_helloWorld As Boolean = True
        Public Property HelloWorld() As Boolean
            Get
                Return m_helloWorld
            End Get
            Set(ByVal value As Boolean)
                m_helloWorld = value
            End Set
        End Property
    End Class
End Namespace

Description

L’application de l’attribut suivant à la classe de package rend la page d’options disponible lorsque le package se charge. Les nombres sont des ID de ressource arbitraires pour la catégorie et la page, et la valeur booléenne à la fin spécifie si la page prend en charge l’automatisation.

Code

[ProvideOptionPage(typeof(HelloWorldOptions), 
    "Hello World Category", "Hello World Page", 
    1000, 1001, false)]
<PackageRegistration(UseManagedResourcesOnly:=True)> _
<DefaultRegistryRoot("Software\Microsoft\VisualStudio\9.0")> _
<InstalledProductRegistration(False, "#110", "#112", "1.0", IconResourceID:=400)> _
<ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)> _
<ProvideMenuResource(1000, 1)> _
<Guid(GuidList.guidPkgString)> _
<ProvideOptionPage(GetType(HelloWorldOptions), "Hello World Category", "Hello World Page", 1000, 1001, False)> _
Public NotInheritable Class UIUserSettingsToolsOptionsPagesPackage
    Inherits Package

Description

Le gestionnaire d’événements suivant affiche un résultat en fonction de la valeur de la propriété définie dans la page options. Elle utilise la GetDialogPage méthode avec le résultat explicitement converti en type de page d’option personnalisée pour accéder aux propriétés exposées par la page.

Dans le cas d’un projet généré par le modèle de package, appelez cette fonction à partir de la MenuItemCallback fonction pour l’attacher à la commande par défaut ajoutée au menu Outils .

Code

private void ShowHelloWorld(object sender, EventArgs e)
{
    var hw = GetDialogPage(typeof(HelloWorldOptions)) 
        as HelloWorldOptions;
    if (hw.HelloWorld == true)
    {
        MessageBox.Show("Hello World!");
    }
    else MessageBox.Show("Goodbye.");
}
Private Sub ShowHelloWorld(ByVal sender As Object, ByVal e As EventArgs)
    Dim hw = TryCast(GetDialogPage(GetType(HelloWorldOptions)), HelloWorldOptions)
    If hw.HelloWorld = True Then
        MessageBox.Show("Hello World!")
    Else
        MessageBox.Show("Goodbye.")
    End If
End Sub