Tutorial: Cambiar el recuadro de acciones de acuerdo con el contexto del usuario

Importante   La información que se incluye en este tema relacionada con Microsoft Word se presenta exclusivamente para beneficio y uso de individuos y organizaciones residentes fuera de los Estados Unidos y sus territorios, o que estén utilizando, o desarrollando programas que se ejecutan en, productos de Microsoft Word con licencia concedida por Microsoft antes de enero de 2010, fecha en que Microsoft quitó una implementación de funcionalidad concreta relacionada con XML personalizado de Microsoft Word. Puede que esta información relacionada con Microsoft Word no sea leída o utilizada por individuos u organizaciones residentes en los Estados Unidos o sus territorios que estén utilizando, o desarrollando programas que se ejecutan en, productos de Microsoft Word con licencia concedida por Microsoft después del 10 de enero de 2010; dichos productos no tendrán el mismo comportamiento que los productos con licencia anterior a esa fecha o comprados, y con licencia para su uso, fuera de los Estados Unidos.

En este tutorial se muestra cómo responder a los eventos XMLNode. Cuando un usuario mueve el cursor en un documento, los controles del panel de acciones se ocultan o se vuelven visibles.

Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento para Word 2007 y Word 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.

En este tutorial se muestran las tareas siguientes:

  • Agregar controles al panel de acciones

  • Mostrar el panel de acciones cuando se abra la aplicación.

  • Ocultar y mostrar controles en el panel de acciones en función de las acciones del usuario en nodos XML.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

-

Una edición de Visual Studio 2010 que incluye las herramientas para desarrolladores de Microsoft Office. Para obtener más información, vea [Configurar un equipo para desarrollar soluciones de Office](bb398242\(v=vs.100\).md).
  • Word 2007 o Word 2010.

Crear el proyecto

El primer paso consiste en crear un proyecto de documento de Word.

Para crear un nuevo proyecto

  • Cree un proyecto de documento de Word con el nombre My Dynamic Actions Pane. En el asistente, seleccione Crear un nuevo documento. Para obtener más información, consulte Cómo: Crear proyectos de Office en Visual Studio.

    Visual Studio abre el nuevo documento de Word en el diseñador y agrega el proyecto Mi recuadro de acciones dinámicas al Explorador de soluciones.

Crear un esquema para asignarlo al documento

Para crear los nodos XML, arrastre elementos de un esquema XML al documento. Cree en primer lugar un archivo de esquema y, a continuación, cree un documento que corresponda al esquema y asigne los elementos al documento.

Para crear el esquema XML

  1. Seleccione el proyecto Mi panel de acciones dinámicas en el Explorador de soluciones.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

    Aparecerá el cuadro de diálogo Agregar nuevo elemento.

  3. En el panel Plantillas, seleccione Esquema XML.

  4. Asigne al esquema el nombre ActionsPaneSample.xsd y haga clic en Agregar.

  5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ActionsPaneSample.xsd y, a continuación, en Abrir con.

  6. En el cuadro de diálogo Abrir con, seleccione Editor XML y, a continuación, haga clic en Aceptar.

  7. Reemplace el texto del editor XML con el texto siguiente.

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema targetNamespace="https://schemas.microsoft.com/vsto/samples" elementFormDefault="qualified"
        xmlns="https://schemas.microsoft.com/vsto/samples"
        xmlns:mstns="https://schemas.microsoft.com/vsto/samples"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Sample" type="SampleType"></xs:element>
      <xs:complexType name="SampleType">
        <xs:all>
          <xs:element name="Insert" type="InsertType" minOccurs="0" maxOccurs="1" />
          <xs:element name="Table" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:all>
      </xs:complexType>
      <xs:complexType name="InsertType">
        <xs:sequence>
          <xs:element name="MemoTo" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="MemoFrom" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="MemoSubject" type="xs:string" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
    
  8. Guarde el proyecto.

Agregar texto y código XML al documento

El documento para este tutorial tiene formato de memorando. Agregue el texto al documento y, a continuación, asigne los elementos XML a ubicaciones en el documento.

Para agregar texto al documento

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ThisDocument.cs o en ThisDocument.vb y, a continuación, haga clic en Diseñador de vistas.

  2. Agregue el texto siguiente al documento de Word.

    MEMORANDO

    Para:

    De:

    Asunto:

    La tabla siguiente muestra la información de contacto solicitada:

    Name

    Dirección

    Ciudad

    Estado

    Código postal

    Nancy Davolio

    507 - 20th Ave. E., Apt. 2A

    Seattle

    WA

    98122

A continuación, asigne elementos XML al texto contenido en el memorando. Se creará un control XMLNode para cada elemento XML que asigne. El nombre del control XMLNode se obtiene agregando los nombres del elemento primario y del elemento secundario a la palabra Node. Por ejemplo, si asigna el elemento Insert del esquema anterior, el nombre será SampleInsertNode. Para obtener más información sobre controles, vea Información general sobre elementos y controles Host.

Para adjuntar el esquema a su documento

  1. En la cinta de opciones, haga clic en la ficha Desarrollador.

    Nota

    Si la ficha Desarrollador no está visible, debe mostrarla primero. Para obtener más información, vea Cómo: Mostrar la pestaña Programador en la cinta de opciones.

  2. En el grupo XML, haga clic en Esquema.

    Se abrirá el cuadro de diálogo Plantillas y complementos.

  3. En el cuadro de diálogo Plantillas y complementos, haga clic en la ficha Esquema XML y, a continuación, haga clic en Agregar esquema.

  4. Vaya al esquema ActionsPaneSample.xsd anteriormente creado, que está situado en su directorio de proyecto, y haga clic en Abrir.

  5. Haga clic en Aceptar en el cuadro de diálogo Configuración del esquema.

  6. Haga clic en Aceptar para cerrar el cuadro de diálogo Plantillas y complementos.

    Se abre el panel de tareas Estructura XML.

Para asignar elementos XML a su documento

  1. Haga clic en el elemento Sample del panel de tareas Estructura XML.

  2. Haga clic en Aplicar a todo el documento cuando se le pregunte.

  3. Seleccione las tres líneas de texto que contienen To, From y Subject y haga clic en el elemento Insertar del panel de tareas Estructura XML.

  4. Coloque el cursor después de Para:, presione la tecla TAB dos veces y haga clic en el elemento MemoTo para insertarlo.

  5. Coloque el cursor después de De:, presione la tecla TAB dos veces y haga clic en el elemento MemoFrom.

  6. Coloque el cursor después de Asunto:, presione la tecla TAB dos veces y haga clic en el elemento MemoSubject.

  7. Seleccione la tabla de manera que quede resaltada toda la tabla y haga clic en el elemento Tabla para aplicarla.

    Las etiquetas XML aparecen dentro de las celdas de la tabla.

  8. Desactive la casilla Mostrar las etiquetas XML del documento.

  9. Haga clic en Opciones XML en la parte inferior del panel de tareas Estructura XML.

  10. Active la casilla Omitir el contenido mixto y haga clic en Aceptar.

  11. Cierre el panel de tareas Estructura XML.

Agregar controles al panel de acciones

Para establecer el diseño de controles en el panel de acciones, se utiliza el diseñador de un control denominado control de panel de acciones, que es básicamente igual a un control de usuario. Puede arrastrar otros controles, como botones y cuadros de texto, al control de panel de acciones y organizarlos. Para cambiar el panel de acciones según el contexto de usuario, debe agregar y diseñar un control de panel de acciones para cada contexto y, a continuación, mostrarlos y ocultarlos según corresponda.

Este tutorial utiliza tres controles de panel de acciones. El primer control del panel de acciones contiene tres cuadros de texto y un botón para que los usuarios finales puedan escribir datos y agregarlos al documento. El segundo control del panel de acciones contiene un botón que abre el cuadro de diálogo Table Properties. El tercer control del panel de acciones contiene una casilla que muestra todos los controles del panel de acciones, sin tener en cuenta dónde está colocado el cursor en el documento.

Para agregar un control del panel de acciones

  1. Seleccione el proyecto Mi panel de acciones dinámicas en el Explorador de soluciones.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  3. En el cuadro de diálogo Agregar nuevo elemento, seleccione Control del panel de acciones, asígnele el nombre AddTextControl y haga clic en Agregar.

  4. Cambie la propiedad Tamaño del control del recuadro de acciones a 170, 135.

Para agregar controles de formularios Windows Forms al primer control de panel de acciones

  1. Desde la ficha Windows Forms del Cuadro de herramientas, arrastre un control Label hasta AddTextControl y cambie la propiedad Text a Para:.

  2. Agregue un control Textbox a AddTextControl y cambie las propiedades siguientes.

    Propiedad

    Valor

    Name

    toBox

    Tamaño

    110, 20

  3. Agregue un segundo control Label a AddTextControl y cambie la propiedad Text a De:.

  4. Agregue un segundo control Textbox a AddTextControl y cambie las propiedades siguientes.

    Propiedad

    Valor

    Name

    fromBox

    Tamaño

    110, 20

  5. Agregue un tercer control Label a AddTextControl bajo el cuadro de texto anterior y cambie la propiedad Text a Asunto:.

  6. Agregue un tercer control Textbox a AddTextControl al lado de la etiqueta anterior y cambie las propiedades siguientes.

    Propiedad

    Valor

    Name

    subjectBox

    Multiline

    True

    Tamaño

    110, 40

  7. Cambie el tamaño del cuadro de texto subjectBox para que permita incluir varias líneas.

  8. Agregue un control Button a AddTextControl y cambie las propiedades siguientes.

    Propiedad

    Valor

    Name

    insertText

    Text

    Insertar

Para crear el segundo control del panel de acciones

  1. Agregue un segundo control del panel del acciones a su proyecto y asígnele el nombre ShowPropertiesControl.

  2. Cambie la propiedad Size del control del panel de acciones a 170, 50.

  3. Desde la ficha Windows Forms del Cuadro de herramientas, arrastre un control Button hasta ShowPropertiesControl y cambie las propiedades siguientes.

    Propiedad

    Valor

    Name

    tableProperties

    Text

    Propiedades de tabla

    Enabled

    False

    Tamaño

    100, 23

  4. Para C#, cambie la propiedad Modifiers del botón a Internal.

Para crear el tercer control del panel de acciones

  1. Agregue un tercer control del panel de acciones a su proyecto y asígnele el nombre ShowAllControl.

  2. Cambie la propiedad Tamaño del control del recuadro de acciones a 170, 75.

  3. En la pestaña Windows Forms del Cuadro de herramientas, agregue un control GroupBox a ShowAllControl y cambie la propiedad Texto a Mi recuadro de acciones.

  4. Agregue un control CheckBox a ShowAllControl por encima del cuadro de grupo y cambie las propiedades siguientes.

    Propiedad

    Valor

    Name

    showCheck

    Text

    Show All Controls

  5. Para C#, cambie la propiedad Modifiers de la casilla a Internal.

Agregar código para responder al contexto del usuario

Ahora puede escribir código para mostrar el panel de acciones y para agregar y quitar controles de panel de acciones según la ubicación del cursor en el documento. El código entra en los controladores de eventos de los controles XMLNode.

Para agregar código a eventos de control de XMLNode

  1. En el Explorador de soluciones, haga clic con el botón secundario en ThisDocument.vb o ThisDocument.cs y, a continuación, haga clic en Ver código.

  2. Cree una referencia variable para cada control del panel de acciones en la sección de declaraciones de ThisDocument.

    Dim addText As New AddTextControl
    Dim showProperties As New ShowPropertiesControl
    Dim showAll As New ShowAllControl
    
    Friend WithEvents showCheck As System.Windows.Forms.CheckBox
    
    private AddTextControl addText = new AddTextControl();
    private ShowPropertiesControl showProperties = new ShowPropertiesControl();
    private ShowAllControl showAll = new ShowAllControl();
    
  3. En el controlador de eventos Startup de ThisDocument, escriba el código siguiente para agregar el control ShowAllControl y mostrar el panel de acciones.

    Me.ActionsPane.Controls.Add(showAll)
    showCheck = showAll.showCheck
    
    this.ActionsPane.Controls.Add(showAll);
    

    Nota

    El orden en el que se agregan los controles al panel de acciones determina su posición. Si tiene un control que siempre estará visible en la parte superior del panel de acciones, debe agregarlo en primer lugar. El orden también depende de la propiedad StackOrder del panel de acciones. Para obtener más información, vea Cómo: Administrar el diseño de controles en recuadros de acciones.

  4. Agregue el código siguiente al controlador de eventos ContextEnter del control SampleInsertNode.

    Private Sub SampleInsertNode_ContextEnter(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleInsertNode.ContextEnter
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Add(addText)
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    End Sub
    
    private void SampleInsertNode_ContextEnter(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Add(addText);
            this.ActionsPane.Controls.Remove(showProperties);
        }
    }
    
  5. Agregue el código siguiente al controlador de eventos ContextLeave del control SampleInsertNode para ocultar el control después de que el usuario haya movido el cursor fuera de este nodo XML.

    Private Sub SampleInsertNode_ContextLeave(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleInsertNode.ContextLeave
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(addText)
        End If
    End Sub
    
    private void SampleInsertNode_ContextLeave(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(addText);
        }
    }
    
  6. Agregue el código siguiente al controlador de eventos ContextEnter del control SampleTableNode.

    Private Sub SampleTableNode_ContextEnter(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleTableNode.ContextEnter
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(addText)
            Me.ActionsPane.Controls.Add(showProperties)
        End If
    
        showProperties.tableProperties.Enabled = True
    End Sub
    
    private void SampleTableNode_ContextEnter(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(addText);
            this.ActionsPane.Controls.Add(showProperties);
        }
        showProperties.tableProperties.Enabled = true;
    }
    
  7. Agregue el código siguiente al controlador de eventos ContextLeave del control SampleTableNode para ocultar el control después de que el usuario haya movido el cursor fuera de este nodo XML.

    Private Sub SampleTableNode_ContextLeave(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleTableNode.ContextLeave
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    
        showProperties.tableProperties.Enabled = False
    End Sub
    
    private void SampleTableNode_ContextLeave(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(showProperties);
        }
        showProperties.tableProperties.Enabled = false;
    }
    
  8. En C#, debe agregar controladores de eventos para los controles XMLNode. Puede colocar este código en el controlador de eventos Startup de ThisDocument. Para obtener más información sobre cómo crear controladores de eventos, vea Cómo: Crear controladores de eventos en proyectos de Office.

    this.SampleInsertNode.ContextEnter +=new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleInsertNode_ContextEnter); 
    
    this.SampleInsertNode.ContextLeave += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleInsertNode_ContextLeave);
    
    this.SampleTableNode.ContextEnter += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleTableNode_ContextEnter);
    
    this.SampleTableNode.ContextLeave += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleTableNode_ContextLeave);
    

Punto de control

Guarde su proyecto y compruebe que los controles del panel de acciones cambian a medida que desplaza el cursor por el documento.

Para probar el proyecto

  1. Presione F5 para ejecutar el proyecto.

  2. Lleve el punto de inserción a la palabra Para y compruebe que el control del panel de acciones addText está visible en el panel de acciones.

  3. Coloque el punto de inserción en el interior de la tabla y compruebe que el control del panel de acciones showProperties está visible en el panel de acciones.

  4. Coloque el punto de inserción en la palabra MEMORANDUM y compruebe que los controles de panel de acciones addText y showProperties no están visibles en el panel de acciones.

Agregar código para responder a los eventos de control en el panel de acciones

Hasta ahora, los controles del panel de acciones no hacen nada. El último paso consiste en escribir código para mostrar todos los controles, insertar texto y mostrar el cuadro de diálogo Table Properties.

Para mostrar todos los controles en el panel de acciones

  1. Agregue el código siguiente a ThisDocument.

    Private Sub showCheck_CheckStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles showCheck.CheckStateChanged
    
        If showAll.showCheck.Checked = True Then
            Me.ActionsPane.Controls.Add(addText)
            Me.ActionsPane.Controls.Add(showProperties)
        Else
            Me.ActionsPane.Controls.Remove(addText)
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    End Sub
    
    private void showCheck_CheckStateChanged(object sender, EventArgs e)
    {
        if (showAll.showCheck.Checked)
        {
            this.ActionsPane.Controls.Add(addText);
            this.ActionsPane.Controls.Add(showProperties);
        }
        else
        {
            this.ActionsPane.Controls.Remove(addText);
            this.ActionsPane.Controls.Remove(showProperties);
        }
    }
    
  2. En C#, debe agregar un controlador de eventos para el control checkbox. Puede colocar este código en el controlador de eventos Startup de ThisDocument.

    showAll.showCheck.CheckStateChanged += new EventHandler(showCheck_CheckStateChanged);
    

Para insertar texto al hacer clic en el botón Insertar

  1. En el Explorador de soluciones, haga clic con el botón secundario en AddTextControl.vb o en AddTextControl.cs y, a continuación, haga clic en Ver código.

  2. En el controlador de eventos Click del botón insertText, escriba el código siguiente.

    Private Sub insertText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles insertText.Click
    
        With Globals.ThisDocument
            .InsertMemoFromNode.Text = Me.fromBox.Text
            .InsertMemoToNode.Text = Me.toBox.Text
            .InsertMemoSubjectNode.Text = Me.subjectBox.Text
        End With
    
        ' Clear the text boxes.
        Me.fromBox.Text = ""
        Me.toBox.Text = ""
        Me.subjectBox.Text = ""
    End Sub
    
    private void insertText_Click(object sender, System.EventArgs e)
    {
        Globals.ThisDocument.InsertMemoFromNode.Text = this.fromBox.Text;
        Globals.ThisDocument.InsertMemoToNode.Text = this.toBox.Text;
        Globals.ThisDocument.InsertMemoSubjectNode.Text = this.subjectBox.Text;
    
        // Clear the text boxes.
        this.fromBox.Text = "";
        this.toBox.Text = "";
        this.subjectBox.Text = "";
    }
    
  3. En C#, debe agregar un controlador de eventos para el botón. Puede colocar este código en el constructor AddTextControl, después de la llamada a InitializeComponent.

    public AddTextControl()
    {
        InitializeComponent();
        this.insertText.Click += new System.EventHandler(this.insertText_Click);
    }
    

Para mostrar el cuadro de diálogo Propiedades de tabla

  1. En el Explorador de soluciones, haga clic con el botón secundario en ShowPropertiesControl.vb o en ShowPropertiesControl.cs y, a continuación, haga clic en Ver código.

  2. Agregue el código siguiente al controlador de eventos Click del botón tableProperties.

    Private Sub tableProperties_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles tableProperties.Click
    
        Globals.ThisDocument.Application.Dialogs( _
            Word.WdWordDialog.wdDialogTableProperties).Show()
    End Sub
    
    private void tableProperties_Click(object sender, System.EventArgs e)
    {
        object timeout = 0;
    
        Globals.ThisDocument.Application.Dialogs[
            Microsoft.Office.Interop.Word.WdWordDialog.wdDialogTableProperties]
                .Show(ref timeout);
    }
    
  3. En C#, debe agregar un controlador de eventos para el botón. Puede colocar este código en el constructor ShowPropertiesControl, después de la llamada a InitializeComponent.

    public ShowPropertiesControl()
    {
        InitializeComponent();
        this.tableProperties.Click += new System.EventHandler(this.tableProperties_Click);
    }
    

Probar la aplicación

Ahora puede probar más exhaustivamente su documento para comprobar la funcionalidad de los controles del panel de acciones.

Para probar el documento

  1. Presione F5 para ejecutar el proyecto.

  2. Confirme que el panel de acciones está visible.

  3. Coloque el cursor en la sección del documento que contiene las líneas Para, De y Asunto y confirme que en el panel de acciones aparecen los controles addText.

  4. Escriba texto en los cuadros de texto Para, De y Asunto en el panel de acciones y haga clic en Insertar.

  5. Coloque el cursor en la tabla y confirme que en el panel de acciones aparece el control showProperties.

  6. Haga clic en el botón Propiedades de tabla y confirme que se abre el cuadro de diálogo Propiedades de tabla.

  7. Haga clic en la casilla Mostrar todo y confirme que en el panel de acciones están visibles todos los controles.

  8. Coloque el cursor fuera de la tabla y confirme que se deshabilita el botón Propiedades de tabla.

Pasos siguientes

Este tutorial muestra los fundamentos para cambiar el panel de acciones en función del contexto del usuario. Estas son algunas de las tareas que se pueden realizar a continuación:

Vea también

Tareas

Cómo: Agregar un recuadro de acciones a un documento de Word

Cómo: Agregar un recuadro de acciones a un libro de Excel

Cómo: Administrar el diseño de controles en recuadros de acciones

Conceptos

XMLNodes (Control)

Otros recursos

Información general sobre recuadros de acciones