Condividi tramite


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 :

  1. Sotto di estensibilità di Visual Basic. La lingua predefinita del progetto di Visual Basic.

  2. Sotto di estensibilità di c#. La lingua predefinita del progetto è c#.

  3. 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

  1. 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.

  2. Nella pagina di selezionare un linguaggio di programmazione , in Visual Basic selezionato o su Visual C#.

  3. Nella pagina di Selezionare le opzioni di package VS , comando di menuselezionato.

  4. 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

  1. Aprire il file di MyToolsOptionsPackage nell'editor di codice.

  2. Aggiungere i seguenti riferimenti agli spazi dei nomi.

    Imports System.ComponentModel
    
    using System.ComponentModel;
    
  3. dichiarare una classe di OptionPageGrid e derivarla da DialogPage.

    Public Class OptionPageGrid
        Inherits DialogPage
    
    public class OptionPageGrid : DialogPage
    
  4. 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.

  5. 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.

  6. Aggiungere una proprietà di OptionInteger alla classe di OptionPageGrid .

    <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 .

  7. 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.

  8. In Visual Studio, scegliere da opzionidel menu di strumenti .

    La finestra di dialogo di opzioni è aperto.

  9. 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.

  10. 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

  1. Aprire il file di MyToolsOptionsPackage nell'editor di codice.

  2. Aggiungere l'istruzione riportata dello spazio dei nomi.

    Imports System.Windows.Forms
    
    using System.Windows.Forms;
    
  3. 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
    
  4. 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; }
        }
    }
    
  5. 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
    
  6. 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.

  7. 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.

  8. 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.

  9. 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;
        }
    }
    
  10. 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.

  11. Nella nuova istanza di Visual Studio, fare clic sul menu di strumenti quindi fare clic su opzioni.

    La finestra di dialogo di opzioni è aperto.

  12. Nella visualizzazione struttura ad albero nel riquadro sinistro, espandere Con La categoria quindi fare clic su Con La pagina personalizzata.

  13. 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.

  14. 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

  1. 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.

  2. 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.

  3. Scegliere dal menu di strumenti , fare clic ottenere l'opzione interna.

    Una finestra di messaggio visualizzato il valore corrente di OptionInteger.

  4. 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

  1. 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.

  2. Nella pagina di selezionare un linguaggio di programmazione , in Visual Basic selezionato o in Visual C#.

  3. Nella pagina di Opzioni selezionate di un VSPackage , comando di menuselezionato.

  4. 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.

  5. Fare clic con il pulsante destro del mouse sul nodo del progetto di AnotherPackage quindi fare clic su set come progetto di avvio.

  6. 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;
    
  7. 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.

  8. 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.

  9. 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

Altre risorse

Stato di un VSPackage