procedura dettagliata: creare una pagina di opzioni
In questa procedura dettagliata vengono creati due pagine le Opzioni degli Strumenti, una pagina semplice e una pagina personalizzata. La pagina semplice utilizza una griglia delle proprietà per esaminare e impostare le proprietà nella pagina personalizzata fornisce la propria interfaccia utente (UI). Il framework gestito del pacchetto (MPF) supporta entrambi gli scenari, con il codice aggiuntivo irrilevante.
Per salvare le proprietà e per ripristinarli da un file di impostazioni, seguire questi passaggi e quindi vedere procedura dettagliata: Creare una categoria di impostazioni.
Il MPF fornisce due classi che consentono di creare pagine Strumenti Opzioni, la classe di Package e la classe di DialogPage . Creare un package VS per fornire un contenitore per queste pagine dalla creazione di una sottoclasse la classe del pacchetto. Si creano ognuno foggiate la pagina delle opzioni derivazione dalla classe di DialogPage.
In questa procedura dettagliata, si creano pagine Strumenti Opzioni e utilizzare la per visualizzare le opzioni e dell'applicazione di modifiche. Per recuperare i valori di opzione dal package VS di hosting. Le recuperate a livello di codice da un altro package VS utilizzando l'automazione.
Prerequisiti
Per completare questa procedura dettagliata, è necessario installare Visual Studio 2010 SDK.
Nota
per ulteriori informazioni su Visual Studio SDK, vedere Cenni preliminari sull'estensione di Visual Studio.Per ulteriori informazioni su come scaricare Visual Studio SDK, vedere Centro per sviluppatori di estensibilità di Visual Studio il sito Web MSDN.
Posizioni del modello di progetto del pacchetto Visual Studio
Il modello di progetto del pacchetto Visual Studio è disponibile in tre posizioni diverse nella finestra di dialogo di nuovo progetto :
Sotto di estensibilità di Visual Basic. La lingua predefinita del progetto di Visual Basic.
Sotto di estensibilità di c#. La lingua predefinita del progetto è c#.
Nell'ambito dell'altra estensibilità dei tipi di progetto. La lingua predefinita del progetto è C++.
Creare una pagina della griglia di opzioni degli strumenti
In questa sezione, si utilizza il modello di progetto importa pacchetto di Visual Studio per creare una griglia di proprietà semplice di opzioni degli strumenti. Utilizzare questa griglia per visualizzare e modificare il valore di una proprietà.
Per creare il progetto VSPackage
creare un nuovo pacchetto MyToolsOptionsdenominato progetto di Visual Studio .
per ulteriori informazioni su come creare un VSPackage gestito, vedere procedura dettagliata: Creazione di un comando di menu utilizzando il modello importa pacchetto Visual Studio.
Nella pagina di selezionare un linguaggio di programmazione , in Visual Basic selezionato o su Visual C#.
Nella pagina di Selezionare le opzioni di package VS , comando di menuselezionato.
Nella pagina di Opzioni del comando , modificare Nome del comando a ottenere l'opzione interna VB o ottenere l'opzione interna CS per Visual Basic o Visual C# rispettivamente, impostare ID di comando a cmdidGetIntOptquindi fare clic su - Fine.
Per creare la griglia delle proprietà di opzioni degli strumenti
Aprire il file di MyToolsOptionsPackage nell'editor di codice.
Aggiungere i seguenti riferimenti agli spazi dei nomi.
Imports System.ComponentModel
using System.ComponentModel;
dichiarare una classe di OptionPageGrid e derivarla da DialogPage.
Public Class OptionPageGrid Inherits DialogPage
public class OptionPageGrid : DialogPage
Applicare ClassInterfaceAttribute alla classe di OptionPageGrid :
<ClassInterface(ClassInterfaceType.AutoDual)> <CLSCompliant(False), ComVisible(True)> Public Class OptionPageGrid Inherits DialogPage
[ClassInterface(ClassInterfaceType.AutoDual)] [CLSCompliant(false), ComVisible(true)] public class OptionPageGrid : DialogPage
Verrà creata un'interfaccia duale COM che consente l'utilizzo GetAutomationObject di automazione di Visual Studio accedere ai membri pubblici della classe a livello di codice.
Applicare ProvideOptionPageAttribute alla classe di un VSPackage per assegnare alla classe una categoria di opzioni e un nome della pagina delle opzioni per 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
Nota
È possibile localizzare la categoria assegnando un ID di risorsa alla proprietà CategoryResourceIDdi attributo.
Aggiungere una proprietà di OptionInteger alla classe di OptionPageGrid .
Applicare CategoryAttribute per assegnare alla proprietà nella categoria della griglia delle proprietà.
Applicare DisplayNameAttribute per assegnare alla proprietà un nome.
Applicare DescriptionAttribute per assegnare alla proprietà di una descrizione.
<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; } } }
Nota
L'implementazione predefinita di DialogPage supporta le proprietà che hanno convertitori appropriati o che sono strutture o matrici che possono essere espanse nelle proprietà che hanno convertitori appropriati.Per un elenco dei convertitori, vedere lo spazio dei nomi di System.ComponentModel .Esempi di estensibilità di Visual Studio gestisce int, stringe le proprietà di System.Drawing.Size .
Compilare e avviare il progetto in modalità di debug premendo F5. Verrà avviata Visual Studio nell'hive test.
Nota
entrambe le versioni di Visual Studio ora sono aperte.
In Visual Studio, scegliere da opzionidel menu di strumenti .
La finestra di dialogo di opzioni è aperto.
Nella visualizzazione struttura ad albero, espandere Con La categoria quindi fare clic su Con La pagina della griglia.
La griglia di opzioni viene visualizzato nel riquadro di destra. La categoria della proprietà è Opzioni personali e i nomi delle proprietà sono OptionFloat e OptionInteger. La descrizione della proprietà, Dell'opzione Integer, verrà visualizzato nella parte inferiore del riquadro.
Modificare il valore dal valore iniziale di 256 su un altro. Fare clic OKquindi riaprire Con La pagina della griglia. È possibile verificare che il nuovo valore viene mantenuto.
Espandere Ambiente e scegliere Tipi di carattere e colori.
Creare una pagina personalizzata di opzioni degli strumenti
In questa sezione, si crea una pagina delle Opzioni degli Strumenti con un'interfaccia utente personalizzata. Utilizzare questa pagina per visualizzare e modificare il valore di una proprietà.
Per creare una pagina personalizzata di opzioni degli strumenti
Aprire il file di MyToolsOptionsPackage nell'editor di codice.
Aggiungere l'istruzione riportata dello spazio dei nomi.
Imports System.Windows.Forms
using System.Windows.Forms;
aggiungere una classe di OptionPageCustom , appena prima che la classe di OptionPageGrid . Derivare una nuova classe da DialogPage.
Public Class OptionPageCustom Inherits DialogPage
public class OptionPageCustom : DialogPage
Scegliere dal menu di strumenti , fare clic Crea GUID copiare e incollare un nuovo GUID con il formato del Registro di sistema nel codice, rimuovendo le parentesi graffe. Aggiunta di una proprietà ClassInterfaceAttribute. Aggiungere la proprietà stringa, OptionString. Si noti che il GUID tale dal GUID nell'esempio:
<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; } } }
Applicare ProvideOptionPageAttribute alla classe di un VSPackage. Si assegnerà alla classe una categoria di opzioni e un nome della pagina di opzioni.
<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
Aggiungere un controllo utente denominato MyUserControl al progetto.
Il controllo utente verrà visualizzato nella visualizzazione progettazione.
Nota
Se viene visualizzato un avviso, ricompilare la soluzione e riaprire MyUserControl.cs.Si tratta di un problema noto.
Aggiungere un controllo di casella di testo al controllo utente. Nella finestra di Proprietà , sulla barra degli strumenti, fare clic sul pulsante di eventi quindi fare doppio clic sull'evento di Consentito .
Il codice generato dallo strumento personalizzato deve essere valido e deve compilare in modo autonomo utilizzando solo insieme di riferimenti presenti nel progetto quando Generate completata l'esecuzione.
Aggiungere un campo pubblico di OptionsPage , un metodo di Initialize alla classe del controllo e aggiornare il corpo del gestore eventi come segue:
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; } }
Il campo di optionsPage utilizza un riferimento all'istanza padre di OptionPageCustom . Il metodo di Initialize visualizzare OptionString in casella di testo. Il gestore eventi scrive il valore corrente di casella di testo a OptionString quando lo stato attivo lascia casella di testo.
Nel file di codice del pacchetto, aggiungere un override della proprietà di OptionPageCustom.Window alla classe di OptionPageCustom per creare, inizializzare e restituire un'istanza di MyUserControl. Di seguito è riportato un esempio:
<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; } }
Compilare e avviare il progetto in modalità di debug premendo F5. Verrà avviata una nuova istanza di Visual Studio.
Nota
entrambe le versioni di Visual Studio sono aperte in questa fase.
Nella nuova istanza di Visual Studio, fare clic sul menu di strumenti quindi fare clic su opzioni.
La finestra di dialogo di opzioni è aperto.
Nella visualizzazione struttura ad albero nel riquadro sinistro, espandere Con La categoria quindi fare clic su Con La pagina personalizzata.
Modificare il valore di OptionString dal valore iniziale, alfa, su un altro. Fare clic OKquindi riaprire Con La pagina personalizzata. È possibile verificare che il nuovo valore ha salvato in modo permanente.
chiudere la nuova istanza di Visual Studio.
Accedere alle opzioni dal package VS di hosting
In questa sezione, si otterrà il valore di un'opzione dal package VS che ospita la pagina delle Opzioni degli Strumenti associata. La stessa tecnica può essere utilizzata per ottenere il valore di qualsiasi proprietà pubblica.
Per accedere a un'opzione dal package VS di hosting
Nel file di package, sostituire il corpo del metodo di MyToolsOptions.MenuItemCallback con le righe seguenti:
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)); }
questo codice chiama GetDialogPage per creare o recuperare un'istanza di OptionPageGrid . OptionPageGrid a sua volta chiama LoadSettingsFromStorage per caricare le relative opzioni, che sono proprietà pubbliche.
Compilare e avviare il progetto in modalità di debug premendo il tasto di scelta rapida, F5. Verrà avviata una nuova istanza di Visual Studio.
Nota
entrambe le versioni di Visual Studio sono aperte in questa fase.
Scegliere dal menu di strumenti , fare clic ottenere l'opzione interna.
Una finestra di messaggio visualizzato il valore corrente di OptionInteger.
Chiudere la nuova istanza di Visual Studio.
Accesso alle opzioni utilizzando l'automazione
In questa sezione, utilizzare l'automazione per ottenere il valore di un'opzione da qualsiasi pacchetto VS o dal componente aggiuntivo. La stessa tecnica può essere utilizzata per ottenere il valore di qualsiasi proprietà pubblica.
Per accedere a un'opzione utilizzando l'automazione
Fare clic con il pulsante destro del mouse sulla soluzione di MyToolsOptions in Esplora soluzioni e aggiungere un nuovo pacchetto AnotherPackage denominato progetto di Visual Studio .
per ulteriori informazioni su come creare un VSPackage gestito, vedere procedura dettagliata: Creazione di un comando di menu utilizzando il modello importa pacchetto Visual Studio.
Nella pagina di selezionare un linguaggio di programmazione , in Visual Basic selezionato o in Visual C#.
Nella pagina di Opzioni selezionate di un VSPackage , comando di menuselezionato.
Nella pagina di ordinare le opzioni , modificare Nome del comando “get l'opzione extern„ e quindi fare clic su - Fine.
il modello crea il progetto gestito, AnotherPackage.
Fare clic con il pulsante destro del mouse sul nodo del progetto di AnotherPackage quindi fare clic su set come progetto di avvio.
Aggiungere i seguenti riferimenti agli spazi dei nomi al file di codice di VsPkg nel progetto AnotherPackage:
Imports EnvDTE Imports System.Windows.Forms
using EnvDTE; using System.Windows.Forms;
Sostituire il corpo del metodo di AnotherPackage.MenuItemCallback con le righe seguenti:
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); }
Questo codice chiama un servizio per ottenere l'oggetto di DTE , l'oggetto radice del modello di automazione di Visual Studio . Properties restituisce le proprietà di raccolta per My Category.MyGridPage, che include tutte le proprietà pubbliche. Il metodo di Item selezionare OptionInteger dalla raccolta.
Compilare e avviare il progetto in modalità di debug premendo il tasto di scelta rapida, F5. Verrà avviata una nuova istanza di Visual Studio.
Nota
entrambe le versioni di Visual Studio sono aperte in questa fase.
Scegliere dal menu di strumenti , fare clic ottenere l'opzione esterna.
Una finestra di messaggio visualizzato il valore corrente di OptionInteger.
Vedere anche
Concetti
Supporto per le pagine di opzioni