Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
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.
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.
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
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.
En Explorador de soluciones, seleccione ThisDocument.cs o ThisDocument.vb.
En la barra de menú, elija Ver, Código.
El archivo de clase Este documento se abre en el editor de código.
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 Functionprotected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() { return new Ribbon1(); }En Explorador de soluciones, seleccione el archivo XML de cinta de opciones.De forma predeterminada, el archivo XML de cinta se denomina Ribbon1.xml.
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.
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.
En el Explorador de soluciones, haga clic con el botón secundario en ThisDocument y, después, haga clic en Ver código.
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 = 0public Microsoft.Office.Tools.Word.Bookmark selectedBookmark; public bool showBoldButton = false; public bool showItalicButton = false; public int WordTrue = -1; public int WordFalse = 0;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.
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.
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 Functionpublic 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
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 Subpublic 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; } } }Explorador de soluciones, seleccione ThisDocument.cs o ThisDocument.vb.
En la barra de menú, elija Ver, Código.
El archivo de clase Este documento se abre en el editor de código.
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 Subvoid 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.
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
Presione F5 para ejecutar el proyecto.
Haga clic con el botón secundario en el primer marcador y, a continuación, haga clic en Negrita.
Compruebe que todo el texto de bookmark1 aparece en negrita.
Haga clic con el botón secundario en el texto donde los marcadores se superponen, y, a continuación, haga clic en Cursiva.
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:
Escribir código de respuesta a los eventos de controles host en Excel.Para obtener más información, vea Tutorial: Programar basándose en los eventos de un control NamedRange.
Utilizar una casilla para cambiar el formato de un marcador.Para obtener más información, vea Tutorial: Cambiar el formato de un documento utilizando controles CheckBox.
Vea también
Conceptos
Automatizar Word con objetos extendidos
Parámetros opcionales en las soluciones de Office