Compartir a través de


tutorial: crear una página opciones

Este tutorial crea dos páginas opciones de herramientas, una página simple y una página personalizada. La página simple utiliza una cuadrícula de propiedades para examinar y establecer las propiedades, y la página personalizada proporciona su propia interfaz de (UI) usuario. El (MPF) managed package admite ambos escenarios, con código adicional muy pequeño.

Para guardar estas propiedades a y la restauración de un archivo de configuración, siga estos pasos y, a continuación vea tutorial: crear una categoría de configuración.

El MPF proporciona dos clases que ayudan a crear páginas opciones de herramientas, la clase de Package y la clase de DialogPage . Crea un VSPackage para proporcionar un contenedor para estas páginas crear subclases de la clase de paquete. Se crea cada página opciones de herramientas derivando de la clase de DialogPage.

En este tutorial, creará las páginas opciones de herramientas y las utiliza para mostrar y cambiar opciones de la aplicación. Recupera los valores de opción de Paquete que hospeda. Se recupera mediante programación de otro Paquete utilizando la automatización de.

Requisitos previos

Para completar este tutorial, debe instalar Visual Studio 2010 SDK.

Nota

Para obtener más información sobre el SDK de Visual Studio, vea Información general de Visual Studio que extiende.Para averiguar cómo descargar el SDK de Visual Studio, vea Centro para desarrolladores de extensibilidad de Visual Studio en el sitio web de MSDN.

Ubicaciones de la plantilla de proyecto paquete de Visual Studio

La plantilla de proyecto paquete de Visual Studio se puede encontrar en tres ubicaciones diferentes en el diálogo de Nuevo proyecto :

  1. bajo extensibilidad de Visual Basic. El idioma predeterminado del proyecto es Visual Basic.

  2. bajo extensibilidad de C#. El lenguaje predeterminado del proyecto es C#.

  3. En otra extensibilidad de los tipos de proyecto. El lenguaje predeterminado del proyecto es C++.

Crear una página de la cuadrícula de las opciones de herramientas

En esta sección, se utiliza la plantilla de proyecto paquete de Visual Studio para crear una cuadrícula de propiedades simple de las opciones de herramientas. Utiliza esta cuadrícula para mostrar y cambiar el valor de una propiedad.

para crear el proyecto de VSPackage

  1. Cree un nuevo proyecto denominado MyToolsOptionsde paquete de Visual Studio .

    Para obtener más información sobre cómo crear un VSPackage administrado, vea tutorial: Crear un comando de menú mediante la plantilla de paquete de Visual Studio.

  2. En la página de Seleccione un lenguaje de programación , seleccione Visual Basic o Visual c#.

  3. En la página de Opciones de selección de VSPackage , seleccione Comando de menú.

  4. En la página de opciones de comando , cambie nombre de comando a obtenga la opción interna VB o obtenga el CS interno de la opción para Visual Basic o Visual C# respectivamente, establezca Identificador de comando a cmdidGetIntOpt, y haga clic en Finalizar.

Para crear la cuadrícula de propiedades de las opciones de herramientas

  1. Abra el archivo de MyToolsOptionsPackage en el editor de código.

  2. Agregue las siguientes referencias de espacio de nombres.

    Imports System.ComponentModel
    
    using System.ComponentModel;
    
  3. declare una clase de OptionPageGrid y derívela de DialogPage.

    Public Class OptionPageGrid
        Inherits DialogPage
    
    public class OptionPageGrid : DialogPage
    
  4. aplica ClassInterfaceAttribute a la clase de OptionPageGrid :

    <ClassInterface(ClassInterfaceType.AutoDual)>
    <CLSCompliant(False), ComVisible(True)>
    Public Class OptionPageGrid
        Inherits DialogPage
    
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [CLSCompliant(false), ComVisible(true)]
    public class OptionPageGrid : DialogPage
    

    Esto crea una interfaz dual COM que permite el uso GetAutomationObject de automatización de Visual Studio de tener acceso a los miembros públicos de la clase mediante programación.

  5. Aplica ProvideOptionPageAttribute a la clase de Paquete para asignar a la clase opciones categoría y el nombre de la página de opciones para 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

    Puede encontrar la categoría asignando un Id. de recurso a la propiedad CategoryResourceIDdel atributo.

  6. agregue una propiedad de OptionInteger a la clase de 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

    La implementación predeterminada de DialogPage admite propiedades que tienen convertidores adecuados o que son estructuras o matrices que se pueden expandir en las propiedades que tienen convertidores adecuados.Para obtener una lista de convertidores, vea el espacio de nombres System.ComponentModel .Ejemplos de extensibilidad de Visual Studio administra int, string, y las propiedades de System.Drawing.Size .

  7. Compile e inicie el proyecto en modo de depuración presionando F5. Esto inicia Visual Studio en el subárbol experimental.

    Nota

    Ambas versiones de Visual Studio se abrirán.

  8. En Visual Studio, haga clic en el Opcionesde menú de Herramientas .

    El cuadro de diálogo Opciones abra.

  9. En la vista de árbol, expanda mi categoría y haga clic en Mi página de cuadrícula.

    La cuadrícula de opciones aparece en el panel derecho. la categoría de la propiedad es mis opciones, y el nombre de propiedad es mientero de la opción. La descripción de la propiedad, Mi opción completa, aparece en la parte inferior del panel.

    Cambie el valor del valor inicial de 256 algo más. Haga clic en Aceptar, y vuelva a abrir Mi página de cuadrícula. Puede ver que conserva el nuevo valor.

  10. salida Visual Studio Exp.

Crear una página de propiedades personalizadas de las opciones de herramientas

En esta sección, creará una página opciones de herramientas con una interfaz de usuario personalizada. Utilice esta página para mostrar y cambiar el valor de una propiedad.

Para crear una página de propiedades personalizadas de las opciones de herramientas

  1. Abra el archivo de MyToolsOptionsPackage en el editor de código.

  2. Agregue la siguiente instrucción de espacio de nombres.

    Imports System.Windows.Forms
    
    using System.Windows.Forms;
    
  3. Agregue una clase de OptionPageCustom , justo antes de la clase de OptionPageGrid . derive la nueva clase de DialogPage.

    Public Class OptionPageCustom
        Inherits DialogPage
    
    public class OptionPageCustom : DialogPage
    
  4. En el menú de Herramientas , haga clic en Crear GUID para copiar y pegar un nuevo GUID con formato del registro en el código, quite las llaves. Agregar una propiedad ClassInterfaceAttribute. Agregue la cadena property, OptionString. Observe que GUID diferirá del GUID del ejemplo:

    <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. Aplica ProvideOptionPageAttribute a la clase de paquete VSPackage. Esto asignar la clase opciones categoría y la página opciones llama.

    <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. Agregue un control de usuario denominado MyUserControl al proyecto.

    El control de usuario se abre en la vista diseño.

    Nota

    Si aparece una advertencia, recompile la solución y vuelva a abrir MyUserControl.cs.Éste es un problema conocido.

  7. Agregue un control de Cuadro de texto al control de usuario. En la ventana de Propiedades , en la barra de herramientas, haga clic en el botón eventos, y haga doble clic en el evento de licencia .

    Se abrirá el editor de código para mostrar el controlador de eventos.

  8. Agregue un campo público de OptionsPage , un método de Initialize a la clase de control, y actualice el cuerpo del controlador de eventos como sigue:

    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;
        }
    }
    

    El campo de optionsPage contiene una referencia a la instancia primaria de OptionPageCustom . El método de Initialize muestra OptionString en Cuadro de texto. El controlador de eventos escribe el valor actual de Cuadro de texto a OptionString cuando el foco salga de Cuadro de texto.

  9. En el archivo de código del paquete, agregue un reemplazo para la propiedad de OptionPageCustom.Window a la clase de OptionPageCustom para crear, inicialice, y devuelva una instancia de MyUserControl. A continuación, se muestra un ejemplo:

    <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. Compile e inicie el proyecto en modo de depuración presionando F5. Esto inicia una nueva instancia de Visual Studio.

    Nota

    Ambas versiones de Visual Studio están abiertos en este punto.

  11. En la nueva instancia de Visual Studio, haga clic en el menú de Herramientas y haga clic en Opciones.

    El cuadro de diálogo Opciones abra.

  12. En la vista de árbol en el panel izquierdo, expanda mi categoría y haga clic en mi página personalizada.

  13. Cambie el valor de OptionString desde su valor inicial, alfa, algo más. Haga clic en Aceptar, y vuelva a abrir mi página personalizada. Puede ver que se ha guardado el nuevo valor.

  14. Cierre la nueva instancia de Visual Studio.

Opciones de acceso del Paquete que hospeda

En esta sección, se obtiene el valor de una opción de VSPackage que hospeda la página opciones asociado de las herramientas. Se puede usar la misma técnica para obtener el valor de cualquier propiedad pública.

Para tener acceso a una opción de Paquete que hospeda

  1. En el archivo de paquete, reemplace el cuerpo del método de MyToolsOptions.MenuItemCallback con las siguientes líneas:

    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));
    }
    

    Este código llama a GetDialogPage para crear o recuperar una instancia de OptionPageGrid . OptionPageGrid a su vez invoca LoadSettingsFromStorage cargar sus opciones, que son propiedades públicas.

  2. Compile e inicie el proyecto en modo de depuración presionando el método abreviado de teclado, presione F5. Esto inicia una nueva instancia de Visual Studio.

    Nota

    Ambas versiones de Visual Studio están abiertos en este punto.

  3. En el menú de Herramientas , haga clic en obtenga la opción interna.

    Un cuadro de mensaje muestra el valor actual de OptionInteger.

  4. Salga de la nueva instancia de Visual Studio.

Opciones de acceso mediante automatización

En esta sección, se utiliza la automatización para obtener el valor de una opción de cualquier paquete VSPackage o del complemento. Se puede usar la misma técnica para obtener el valor de cualquier propiedad pública.

Para tener acceso a una opción mediante automatización

  1. Haga clic con el botón secundario en la solución de MyToolsOptions en Explorador de soluciones y agregue un nuevo proyecto denominado AnotherPackage de paquete de Visual Studio .

    Para obtener más información sobre cómo crear un VSPackage administrado, vea tutorial: Crear un comando de menú mediante la plantilla de paquete de Visual Studio.

  2. En la página de Seleccione un lenguaje de programación , seleccione Visual Basic o Visual c#.

  3. En la página de Opciones de selección de VSPackage , seleccione Comando de menú.

  4. En la página de opciones de comando , cambie nombre de comando “obtienen la opción externa”, y haga clic en Finalizar.

    la plantilla crea el proyecto administrado, AnotherPackage.

  5. Haga clic con el botón secundario en el proyecto de AnotherPackage y haga clic en Establecer como proyecto de inicio.

  6. Agregue las siguientes referencias de espacio de nombres al archivo de código de VsPkg en el proyecto de AnotherPackage:

    Imports EnvDTE
    Imports System.Windows.Forms
    
    using EnvDTE;
    using System.Windows.Forms;
    
  7. Reemplace el cuerpo del método de AnotherPackage.MenuItemCallback con las siguientes líneas:

    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);
    }
    

    Este código llama a un servicio para obtener el objeto de DTE , el objeto raíz del modelo de automatización de Visual Studio . Properties devuelve la colección de propiedades de My Category.MyGridPage, que incluye todas las propiedades públicas. el método de Item selecciona OptionInteger de la colección.

  8. Compile e inicie el proyecto en modo de depuración presionando el método abreviado de teclado, presione F5. Esto inicia una nueva instancia de Visual Studio.

    Nota

    Ambas versiones de Visual Studio están abiertos en este punto.

  9. En el menú de Herramientas , haga clic en obtenga la opción externa.

    Un cuadro de mensaje muestra el valor actual de OptionInteger.

Vea también

Conceptos

Compatibilidad con páginas opciones

Otros recursos

estado de VSPackage