Tutorial: Crear menús de acceso directo para marcadores

Actualización: noviembre 2007

Se aplica a

La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office.

Tipo de proyecto

  • Proyectos de nivel de documento

Versión de Microsoft Office

  • Word 2007

  • Word 2003

Para obtener más información, consulte Características disponibles por aplicación y tipo de proyecto.

En este tutorial se muestra cómo crear menús de acceso directo 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ú de acceso directo que proporciona las opciones de usuario para dar formato al texto.

Este tutorial ilustra las tareas siguientes:

  • Agregar texto y marcadores al documento de un proyecto en el nivel del documento en tiempo de diseño.

  • Crear un menú de acceso directo.

  • Comprobar la superposición de marcadores.

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:

  • Visual Studio Tools para Office (componente opcional de Visual Studio 2008 Professional y Visual Studio Team System).

  • Microsoft Office Word 2003 o Microsoft Office Word 2007.

Visual Studio Tools para Office se instala, de forma predeterminada, con las versiones que se enumeran de Visual Studio. Para comprobar si está instalado, consulte Instalar Visual Studio Tools para Office.

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ú de acceso directo de marcador. En el asistente, seleccione Crear un nuevo documento. Para obtener más información, consulte Cómo: Crear proyectos de Visual Studio para Office.

    Visual Studio abrirá el nuevo documento de Word en el diseñador y agregará el proyecto Mi menú de acceso directo 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

  • Escriba el texto siguiente.

    Éste es un ejemplo de cómo crear un menú de acceso directo 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. Desde la ficha Controles de Word del Cuadro de herramientas, arrastre un control Bookmark al documento.

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

  2. En el documento, seleccione las palabras crear un menú de acceso directo al hacer clic con el botón secundario en el texto y, después, haga clic en Aceptar.

    bookmark1 se agregará al documento.

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

    bookmark2 se agregará al documento.

    Nota:

    Las palabras al hacer clic con el botón secundario en el texto aparecerán tanto en bookmark1 como en 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ú de acceso directo cuando el usuario haga clic con el botón secundario en el texto del marcador.

Crear el menú de acceso directo

Para crear el menú de acceso directo

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

  2. Declare las variables CommandBar y una variable de marcador en el nivel de clase.

    Private commandBar As Office.CommandBar
    Private selectedBookmark As Microsoft.Office.Tools.Word.Bookmark
    WithEvents boldText As Office.CommandBarButton
    WithEvents ItalicText As Office.CommandBarButton
    
    private Office.CommandBar commandBar;
    private Office.CommandBarButton boldText;
    private Office.CommandBarButton italicText;
    private Microsoft.Office.Tools.Word.Bookmark selectedBookmark;
    
    const int WordTrue = -1;
    const int WordFalse = 0;
    
  3. Agregue un método para crear el menú.

    Private Sub AddPopUp()
    
        commandBar = Application.CommandBars.Add( _
            "FormatText", Office.MsoBarPosition.msoBarPopup, , True)
    
        ' Add a button and set the style, caption, icon and tag.
        boldText = CType(commandBar.Controls.Add(1), Office.CommandBarButton)
    
        With boldText
            .Style = Office.MsoButtonStyle.msoButtonIconAndCaption
            .Caption = "Bold"
            .FaceId = 113
            .Tag = "0"
        End With
    
        ' Add a button and set the style, caption, icon and tag.
        ItalicText = CType(commandBar.Controls.Add(1), Office.CommandBarButton)
    
        With ItalicText
            .Style = Office.MsoButtonStyle.msoButtonIconAndCaption
            .Caption = "Italic"
            .FaceId = 114
            .Tag = "1"
        End With
    
        CType(Me.AttachedTemplate, Microsoft.Office.Interop.Word.Template).Saved = True
    
    End Sub
    
    private void AddPopUp()
    {
        commandBar = Application.CommandBars.Add("FormatText",
            Office.MsoBarPosition.msoBarPopup, missing, true);
    
        // Add a button and set the style, caption, icon and tag.
        boldText = (Office.CommandBarButton)commandBar.Controls.Add(
            1, missing, missing, missing, missing);
    
        boldText.Style = Office.MsoButtonStyle.msoButtonCaption;
        boldText.Caption = "Bold";
        boldText.FaceId = 113;
        boldText.Tag = "0";
    
        // Add a button and set the style, caption, icon and tag.
        italicText = (Office.CommandBarButton)commandBar.Controls.Add(
            1, missing, missing, missing, missing);
    
        italicText.Style = Office.MsoButtonStyle.msoButtonCaption;
        italicText.Caption = "Italic";
        italicText.FaceId = 114;
        italicText.Tag = "1";
    
        // Handle the click events with the ButtonClick procedure.
        boldText.Click += new Microsoft.Office.Core
            ._CommandBarButtonEvents_ClickEventHandler(ButtonClick);
    
        italicText.Click += new Microsoft.Office.Core
            ._CommandBarButtonEvents_ClickEventHandler(ButtonClick);
    
        ((Microsoft.Office.Interop.Word.Template)this.AttachedTemplate).Saved = true;
    }
    
  4. Llame al método AddPopup desde el evento Startup de ThisDocument.

    Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As _
        System.EventArgs) Handles Me.Startup
    
        AddPopUp()
    End Sub
    
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        AddPopUp();
    }
    

Para aplicar formato al texto del marcador

  1. Agregue un controlador de eventos ButtonClick para aplicar formato al marcador:

    Private Sub ButtonClick(ByVal ctrl As Office.CommandBarButton, _
        ByRef Cancel As Boolean) Handles boldText.Click, ItalicText.Click
    
        Select Case ctrl.Caption
            Case "Bold"
                selectedBookmark.Bold = Not selectedBookmark.Bold
            Case "Italic"
                selectedBookmark.Italic = Not selectedBookmark.Italic
        End Select
    
        Me.ActiveWindow.SetFocus()
    End Sub
    
    private void ButtonClick(Microsoft.Office.Core.CommandBarButton Ctrl, 
        ref bool CancelDefault)
    {
        if (Ctrl.Caption == "Bold")
        {
            if (selectedBookmark.Bold == WordTrue)
            {
                selectedBookmark.Bold = WordFalse;
            }
            else 
            {
                selectedBookmark.Bold = WordTrue;
            }
        }
        else if (Ctrl.Caption == "Italic")
        {
            if (selectedBookmark.Italic == WordTrue)
            {
                selectedBookmark.Italic = WordFalse;
            }
            else
            {
                selectedBookmark.Italic = WordTrue;
            } 
        }
    }
    
  2. Agregue un controlador de eventos showPopupMenu para controlar los eventos BeforeRightClick de ambos marcadores.

    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.

    Private Sub showPopupMenu(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 popup.
        If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _
            startPosition Then
            selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark)
            commandBar.ShowPopup()
            e.Cancel = True
        End If
    End Sub
    
    private void showPopupMenu(object sender, 
        Microsoft.Office.Tools.Word.ClickEventArgs e)
    {
        int startPosition = 0;
    
        // If bookmarks overlap, get bookmark closest to cursor.
        for (int i = 1; i <= e.Selection.Bookmarks.Count; i++)
        {
            object o = i;
            if (e.Selection.Bookmarks.get_Item(ref o).Start > startPosition)
            {
                startPosition = e.Selection.Bookmarks.get_Item(ref o).Start;
            }
        }
    
        // If closest bookmark is the sender, show the popup.
        if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition)
        {
            selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
            commandBar.ShowPopup(missing, missing);
            e.Cancel = true;
        }
    
    
    }
    
  3. 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 Visual Studio Tools para Office

    this.bookmark1.BeforeRightClick += new Microsoft.Office.Tools.Word.
        ClickEventHandler(showPopupMenu);
    
    this.bookmark2.BeforeRightClick += new Microsoft.Office.Tools.Word.
        ClickEventHandler(showPopupMenu);
    

Probar la aplicación

Pruebe el documento para comprobar si los elementos de menú en negrita y cursiva aparecen en el menú de acceso directo al hacer clic con el botón secundario en el texto de un marcador y si se ha aplicado formato al texto de forma correcta.

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

Personalización de la interfaz de usuario de Office

Bookmark (Control)

Descripción de los parámetros opcionales en las soluciones de Office

Otros recursos

Controles Host de Word