Tutorial: Crear menús de acceso directo para marcadores

En este tutorial se muestra cómo crear menús contextuales para los controles Bookmark de una personalización en el nivel del documento para Word.Cuando un usuario hace clic con el botón secundario en el texto de un marcador, aparece un menú contextual que proporciona las opciones de usuario para dar formato al texto.

Se aplica a: La información de este tema se aplica a los proyectos de nivel de documento para Word 2013 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:

  • Crear el proyecto.

  • Agregar texto y marcadores al documento.

  • Comandos para agregar un menú contextual.

  • Para aplicar formato al texto del marcador.

[!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 2012 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.110\).md).
  • Word 2013 o Word 2010

Crear el proyecto

El primer paso es crear un proyecto de documento de Word en Visual Studio.

Para crear un nuevo proyecto

  • Cree un proyecto de documento de Word con el nombre Mi menú contextual de marcador.En el asistente, seleccione Crear un nuevo documento.Para obtener más información, vea Cómo: Crear proyectos de Office en Visual Studio.

    Visual Studio abrirá el nuevo documento de Word en el diseñador y agregará el proyecto Mi menú contextual de marcador al Explorador de soluciones.

Agregar texto y marcadores al documento

Agregue texto al documento y, a continuación, agregue dos marcadores superpuestos.

Para agregar texto al documento

  • En el documento que aparece en el diseñador de proyectos, escriba el texto siguiente.

    Éste es un ejemplo de cómo crear un menú contextual al hacer clic con el botón secundario del mouse en el texto de un marcador.

Para agregar un control para marcador al documento

  1. En Cuadro de herramientas, desde la ficha Controles de Word , arrastre un control Bookmark al documento.

    Aparece el cuadro de diálogo Agregar control de marcador.

  2. Seleccione las palabras “que creen un menú contextual al hacer clic con el botón secundario en el texto”, y haga clic en Aceptar.

    bookmark1 se agregará al documento.

  3. Agregue otro control Bookmark a las palabras “clic con el botón secundario en el texto de un marcador”.

    bookmark2 se agregará al documento.

    [!NOTA]

    Las palabras “clic con el botón secundario en el texto” están en bookmark1 y bookmark2.

Al agregar un marcador a un documento en tiempo de diseño, se crea un control Bookmark.Puede programar en respuesta a varios eventos del marcador.Se puede escribir código en el evento BeforeRightClick del marcador para que aparezca un menú contextual cuando el usuario haga clic con el botón secundario en el texto del marcador.

Comandos para agregar un menú contextual

Agregue botones al menú contextual que aparece al hacer clic con el botón secundario en el documento.

Para agregar comandos a un menú contextual

  1. Agregue un elemento Cinta XML al proyecto.Para obtener más información, vea Cómo: Iniciarse en la personalización de la cinta de opciones.

  2. En Explorador de soluciones, seleccione ThisDocument.cs o ThisDocument.vb.

  3. En la barra de menú, elija Ver, Código.

    El archivo de clase Este documento se abre en el editor de código.

  4. Agregue el código siguiente a la clase Este documento .Este código invalida el método CreateRibbonExtensibilityObject y devuelve la clase XML de la cinta de opciones a la aplicación de Office.

    Protected Overrides Function CreateRibbonExtensibilityObject() As Microsoft.Office.Core.IRibbonExtensibility
        Return New Ribbon1()
    End Function
    
    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        return new Ribbon1();
    }
    
  5. En Explorador de soluciones, seleccione el archivo XML de cinta de opciones.De forma predeterminada, el archivo XML de cinta se denomina Ribbon1.xml.

  6. En la barra de menú, elija Ver, Código.

    El archivo XML de la cinta de opciones se abre en el editor de código.

  7. En el editor de código, reemplace el contenido del archivo XML de cinta de opciones con el código siguiente.

    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
      <contextMenus>
        <contextMenu idMso="ContextMenuText">
          <button id="BoldButton" label="Bold" onAction="ButtonClick"        
               getVisible="GetVisible" />
          <button id="ItalicButton" label="Italic" onAction="ButtonClick" 
              getVisible="GetVisible"/>
        </contextMenu>
      </contextMenus>
    </customUI>
    

    Este código agrega dos botones al menú contextual que aparece al hacer clic con el botón secundario en el documento.

  8. En el Explorador de soluciones, haga clic con el botón secundario en ThisDocument y, después, haga clic en Ver código.

  9. Declare las variables siguientes y una variable de marcador en el nivel de clase.

    Public selectedBookmark As Microsoft.Office.Tools.Word.Bookmark
    Public ShowBoldButton As String = False
    Public ShowItalicButton As String = False
    Public WordTrue As Integer = -1
    Public WordFalse As Integer = 0
    
            public Microsoft.Office.Tools.Word.Bookmark selectedBookmark;
            public bool showBoldButton = false;
            public bool showItalicButton = false;
            public int WordTrue = -1;
            public int WordFalse = 0;
    
    
  10. En Explorador de soluciones, seleccione el archivo de código de la cinta de opciones.De forma predeterminada, el archivo de código de la cinta de opciones se denomina Ribbon1.cs o Ribbon1.vb.

  11. En la barra de menú, elija Ver, Código.

    Se abre el archivo de código de la cinta de opciones en el editor de código.

  12. En el archivo de código de la cinta de opciones, agregue el siguiente método.Éste es un método de devolución de llamada para los dos botones que ha agregado al menú contextual del documento.Este método determina si estos botones aparecen en el menú contextual.Los botones en negrita y cursiva aparecen sólo si el hacer clic con el botón secundario en el marcador.

    Public Function GetVisible(ByVal control As Office.IRibbonControl) As Boolean
        If control.Id = "BoldButton" Then
            If Globals.ThisDocument.ShowBoldButton = True Then
                Globals.ThisDocument.ShowBoldButton = False
                Return True
            Else
                Return False
            End If
        ElseIf control.Id = "ItalicButton" Then
            If Globals.ThisDocument.ShowItalicButton = True Then
                Globals.ThisDocument.ShowItalicButton = False
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function
    
           public bool GetVisible(Office.IRibbonControl control)
           {
               if (control.Id == "BoldButton")
               {
                   if (Globals.ThisDocument.showBoldButton == true)
                   {
                       Globals.ThisDocument.showBoldButton = false;
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               else if (control.Id == "ItalicButton")
               {
                   if (Globals.ThisDocument.showItalicButton == true)
                   {
                       Globals.ThisDocument.showItalicButton = false;
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               else
               {
                   return false;
               }
    
           }
    
    

Para aplicar formato al texto del marcador

  1. En el archivo de código de la cinta de opciones, agregue un controlador de eventos ButtonClick para aplicar formato al marcador.

    Public Sub ButtonClick(ByVal control As Office.IRibbonControl)
        If control.Id = "BoldButton" Then
            If Globals.ThisDocument.selectedBookmark.Bold = _
                Globals.ThisDocument.WordTrue Then
                Globals.ThisDocument.selectedBookmark.Bold = _
                    Globals.ThisDocument.WordFalse
            Else
                Globals.ThisDocument.selectedBookmark.Bold = _
                    Globals.ThisDocument.WordTrue
            End If
        ElseIf control.Id = "ItalicButton" Then
            If Globals.ThisDocument.selectedBookmark.Italic = _
                Globals.ThisDocument.WordTrue Then
                Globals.ThisDocument.selectedBookmark.Italic = _
                    Globals.ThisDocument.WordFalse
            Else
                Globals.ThisDocument.selectedBookmark.Italic = _
                    Globals.ThisDocument.WordTrue
            End If
        End If
    End Sub
    
    public void ButtonClick(Office.IRibbonControl control)
    {
        if (control.Id == "BoldButton")
        {
            if (Globals.ThisDocument.selectedBookmark.Bold == 
                Globals.ThisDocument.WordTrue)
            {
                Globals.ThisDocument.selectedBookmark.Bold = 
                    Globals.ThisDocument.WordFalse;
            }
            else
            {
                Globals.ThisDocument.selectedBookmark.Bold = 
                    Globals.ThisDocument.WordTrue;
            }
        }
        else if (control.Id == "ItalicButton")
        {
            if (Globals.ThisDocument.selectedBookmark.Italic == 
                Globals.ThisDocument.WordTrue)
            {
                Globals.ThisDocument.selectedBookmark.Italic = 
                    Globals.ThisDocument.WordFalse;
            }
            else
            {
                Globals.ThisDocument.selectedBookmark.Italic = 
                    Globals.ThisDocument.WordTrue;
            }
        }
    
    }
    
  2. Explorador de soluciones, seleccione ThisDocument.cs o ThisDocument.vb.

  3. En la barra de menú, elija Ver, Código.

    El archivo de clase Este documento se abre en el editor de código.

  4. Agregue el código siguiente a la clase Este documento .

    
    Private Sub Bookmark_BeforeRightClick(ByVal sender As Object, ByVal e _
    As Microsoft.Office.Tools.Word.ClickEventArgs) _
    Handles Bookmark1.BeforeRightClick, Bookmark2.BeforeRightClick
        Dim startPosition As Integer = 0
        Dim i As Integer
    
        ' If bookmarks overlap, get bookmark closest to cursor.
        For i = 1 To e.Selection.Bookmarks.Count
            If e.Selection.Bookmarks(i).Start > startPosition Then
                startPosition = e.Selection.Bookmarks(i).Start
            End If
        Next
    
        ' If closest bookmark is the sender, show the shortcut menu options.
        If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _
            startPosition Then
            selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark)
    
            ShowBoldButton = True
            ShowItalicButton = True
    
        End If
    
    End Sub
    
    
            void bookmark_BeforeRightClick(object sender, ClickEventArgs e)
            {
                int startPosition = 0;
    
                // If bookmarks overlap, get bookmark closest to cursor.
                for (int i = 1; i <= e.Selection.Bookmarks.Count; i++)
                {
                    if (e.Selection.Bookmarks[i].Start > startPosition)
                    {
                        startPosition = e.Selection.Bookmarks[i].Start;
                    }
                }
    
                // If closest bookmark is the sender, show shortcut menu options.
                if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition)
                {
                    selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
    
                    showBoldButton = true;
                    showItalicButton = true;
    
                }
    
            }
    
    

    [!NOTA]

    Deberá escribir código para controlar las situaciones en que se superpongan los marcadores.De lo contrario, se llamará de forma predeterminada al código de todos los marcadores de la selección.

  5. En C#, debe agregar controladores de eventos para los controles de marcadores al evento Startup.Para obtener más información sobre cómo crear controladores de eventos, vea Cómo: Crear controladores de eventos en proyectos de Office.

    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        this.bookmark1.BeforeRightClick += new ClickEventHandler(bookmark_BeforeRightClick);
        this.bookmark2.BeforeRightClick += new ClickEventHandler(bookmark_BeforeRightClick);
    }
    

Probar la aplicación

Pruebe el documento para comprobar que los elementos de menú en negrita y cursiva aparecen en el menú contextual al hacer clic con el botón secundario en un marcador y que el texto tiene el formato correcto.

Para probar el documento

  1. Presione F5 para ejecutar el proyecto.

  2. Haga clic con el botón secundario en el primer marcador y, a continuación, haga clic en Negrita.

  3. Compruebe que todo el texto de bookmark1 aparece en negrita.

  4. Haga clic con el botón secundario en el texto donde los marcadores se superponen, y, a continuación, haga clic en Cursiva.

  5. Compruebe que todo el texto de bookmark2 está en cursiva y que únicamente la parte de texto de bookmark1 que se superpone a bookmark2 está en cursiva.

Pasos siguientes

Éstas son algunas de las tareas que pueden venir a continuación:

Vea también

Conceptos

Tutoriales para Word

Automatizar Word con objetos extendidos

Bookmark (Control)

Parámetros opcionales en las soluciones de Office

Otros recursos

Personalización de la interfaz de usuario de Office