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