Cómo: Agregar controles de contenido a documentos de Word
En proyectos de Word en el nivel del documento, puede agregar controles de contenido al documento en el proyecto en tiempo de diseño o en tiempo de ejecución. En los proyectos de Word en el nivel de aplicación, puede agregar controles de contenido a cualquier documento abierto en tiempo de ejecución.
Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento y los proyectos de nivel de aplicación 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 tema se describen las tareas siguientes:
Agregar controles de contenido en tiempo de diseño
Agregar controles de contenido en tiempo de ejecución en un proyecto en el nivel del documento
Agregar controles de contenido en tiempo de ejecución en un proyecto en el nivel de la aplicación
Para obtener más información sobre los controles de contenido, vea Controles de contenido.
Agregar controles de contenido en tiempo de diseño
Hay varias maneras de agregar controles de contenido al documento en tiempo de diseño en un proyecto en el nivel del documento:
Agregue un control de contenido desde la ficha Controles de Word del Cuadro de herramientas.
Agregue un control de contenido al documento de la misma manera en que agregaría un control de contenido nativo en Word.
Arrastre un control de contenido al documento desde la ventana Orígenes de datos. Este método resulta útil cuando se desea enlazar el control a los datos en el momento en que crea el control. Para obtener más información, vea Cómo: Rellenar documentos con datos de objetos y Cómo: Rellenar documentos con datos de una base de datos.
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.
Para agregar un control de contenido a un documento mediante el Cuadro de herramientas
En el documento que se hospeda en el diseñador de Visual Studio, coloque el cursor donde desea agregar el control de contenido o seleccione el texto que debe reemplazar el control de contenido.
Abra el Cuadro de herramientas y haga clic en la ficha Controles de Word.
Agregue el control de cualquiera de las maneras siguientes:
Haga doble clic en un control de contenido en el Cuadro de herramientas.
-O bien-
Haga clic en un control de contenido en el Cuadro de herramientas y, a continuación, presione la tecla Entrar.
-O bien-
Arrastre un control de contenido desde el Cuadro de herramientas hasta el documento. El control de contenido se agrega en la selección actual del documento, no en la ubicación del puntero del mouse.
Nota
No puede agregar objetos GroupContentControl mediante el Cuadro de herramientas. Sólo puede agregar un objeto GroupContentControl en Word o en tiempo de ejecución.
Nota
Visual Studio no proporciona un control de contenido de casilla en el Cuadro de herramientas para los proyectos de Word 2010. PAra agregar un control de contenido de casilla al documento, debe crear un objeto ContentControl mediante programación. Para obtener más información, vea Controles de contenido.
Para agregar un control de contenido a un documento de Word
En el documento que se hospeda en el diseñador de Visual Studio, coloque el cursor donde desea agregar el control de contenido o seleccione el texto que debe reemplazar el control de contenido.
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, consulte Cómo: Mostrar la pestaña Programador en la cinta de opciones.
En el grupo Controles, haga clic en el icono del control de contenido que desea agregar.
Agregar controles de contenido en tiempo de ejecución en un proyecto en el nivel del documento
Puede agregar controles de contenido al documento mediante programación en tiempo de ejecución con métodos de la propiedad Controls de la clase ThisDocument del proyecto. Cada método tiene tres sobrecargas que puede utilizar para agregar un control de contenido de las maneras siguientes:
Agregar un control en la selección actual.
Agregar un control en un intervalo especificado.
Agregar un control basado en un control de contenido nativo del documento.
Los controles de contenido creados de forma dinámica no se conservan en el documento cuando este se cierra. Sin embargo, un control de contenido nativo permanece en el documento. Puede volver a crear un control de contenido basado en un control de contenido nativo la próxima vez que se abra el documento. Para obtener más información, vea Agregar controles a documentos de Office en tiempo de ejecución.
Nota
Para agregar un control de contenido de casilla a un documento en un proyecto de Word 2010, debe crear un objeto ContentControl. Para obtener más información, vea Controles de contenido.
Para agregar un control de contenido en la selección actual
Utilice un método ControlCollection con el nombre Add<clase de control> (donde clase de control es el nombre de clase del control de contenido que desea agregar, como AddRichTextContentControl) y con un único parámetro para el nombre del nuevo control.
En el ejemplo de código siguiente se utiliza el método ControlCollection.AddRichTextContentControl(String) para agregar un nuevo RichTextContentControl al principio del documento. Para ejecutar este código, agregue el código a la clase ThisDocument del proyecto y llame al método AddRichTextControlAtSelection desde el controlador de eventos ThisDocument_Startup.
Dim richTextControl1 As Microsoft.Office.Tools.Word.RichTextContentControl Private Sub AddRichTextControlAtSelection() Me.Paragraphs(1).Range.InsertParagraphBefore() Me.Paragraphs(1).Range.Select() richTextControl1 = Me.Controls.AddRichTextContentControl("richTextControl1") richTextControl1.PlaceholderText = "Enter your first name" End Sub
private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1; private void AddRichTextControlAtSelection() { this.Paragraphs[1].Range.InsertParagraphBefore(); this.Paragraphs[1].Range.Select(); richTextControl1 = this.Controls.AddRichTextContentControl("richTextControl1"); richTextControl1.PlaceholderText = "Enter your first name"; }
Para agregar un control de contenido en un intervalo especificado
Utilice un método ControlCollection con el nombre Add<clase de control> (donde clase de control es el nombre de la clase de control de contenido que desea agregar, como AddRichTextContentControl) y con un parámetro Microsoft.Office.Interop.Word.Range.
En el ejemplo de código siguiente se utiliza el método ControlCollection.AddRichTextContentControl(Range, String) para agregar un nuevo RichTextContentControl al principio del documento. Para ejecutar este código, agregue el código a la clase ThisDocument del proyecto y llame al método AddRichTextControlAtRange desde el controlador de eventos ThisDocument_Startup.
Dim richTextControl2 As Microsoft.Office.Tools.Word.RichTextContentControl Private Sub AddRichTextControlAtRange() Me.Paragraphs(1).Range.InsertParagraphBefore() richTextControl2 = Me.Controls.AddRichTextContentControl(Me.Paragraphs(1).Range, _ "richTextControl2") richTextControl2.PlaceholderText = "Enter your first name" End Sub
private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl2; private void AddRichTextControlAtRange() { this.Paragraphs[1].Range.InsertParagraphBefore(); richTextControl2 = this.Controls.AddRichTextContentControl(this.Paragraphs[1].Range, "richTextControl2"); richTextControl2.PlaceholderText = "Enter your first name"; }
Para agregar un control de contenido basado en un control de contenido nativo
Utilice un método ControlCollection con el nombre Add<clase de control> (donde clase de control es el nombre de la clase de control de contenido que desea agregar, como AddRichTextContentControl) y con un parámetro Microsoft.Office.Interop.Word.ContentControl.
En el ejemplo de código siguiente se utiliza el método ControlCollection.AddRichTextContentControl(ContentControl, String) para crear un nuevo control RichTextContentControl por cada control de texto enriquecido nativo que está en el documento. Para ejecutar este código, agregue el código a la clase ThisDocument del proyecto y llame al método CreateRichTextControlsFromNativeControls desde el controlador de eventos ThisDocument_Startup.
Private richTextControls As New System.Collections.Generic.List _ (Of Microsoft.Office.Tools.Word.RichTextContentControl) Private Sub CreateRichTextControlsFromNativeControls() If Me.ContentControls.Count <= 0 Then Return End If Dim count As Integer = 0 For Each nativeControl As Word.ContentControl In Me.ContentControls If nativeControl.Type = Word.WdContentControlType.wdContentControlRichText Then count += 1 Dim tempControl As Microsoft.Office.Tools.Word.RichTextContentControl = _ Me.Controls.AddRichTextContentControl(nativeControl, _ "VSTORichTextContentControl" + count.ToString()) richTextControls.Add(tempControl) End If Next nativeControl End Sub
private System.Collections.Generic.List <Microsoft.Office.Tools.Word.RichTextContentControl> richTextControls; private void CreateRichTextControlsFromNativeControls() { if (this.ContentControls.Count <= 0) return; richTextControls = new System.Collections.Generic.List <Microsoft.Office.Tools.Word.RichTextContentControl>(); int count = 0; foreach (Word.ContentControl nativeControl in this.ContentControls) { if (nativeControl.Type == Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText) { count++; Microsoft.Office.Tools.Word.RichTextContentControl tempControl = this.Controls.AddRichTextContentControl(nativeControl, "VSTORichTextControl" + count.ToString()); richTextControls.Add(tempControl); } } }
Agregar controles de contenido en tiempo de ejecución en un proyecto en el nivel de la aplicación
Puede agregar mediante programación y en tiempo de ejecución controles de contenido a cualquier documento abierto utilizando un complemento de nivel de aplicación. Para ello, genere un elemento host Document basado en un documento abierto y utilice métodos de la propiedad Controls de este elemento host. Cada método tiene tres sobrecargas que puede utilizar para agregar un control de contenido de las maneras siguientes:
Agregar un control en la selección actual.
Agregar un control en un intervalo especificado.
Agregar un control basado en un control de contenido nativo del documento.
Los controles de contenido creados de forma dinámica no se conservan en el documento cuando este se cierra. Sin embargo, un control de contenido nativo permanece en el documento. Puede volver a crear un control de contenido basado en un control de contenido nativo la próxima vez que se abra el documento. Para obtener más información, vea Guardar controles dinámicos en documentos de Office.
Para obtener más información sobre cómo generar elementos host en proyectos de nivel de aplicación, vea Ampliar documentos de Word y libros de Excel en complementos en el nivel de la aplicación en tiempo de ejecución.
Nota
Para agregar un control de contenido de casilla a un documento en un proyecto de Word 2010, debe crear un objeto ContentControl. Para obtener más información, vea Controles de contenido.
Para agregar un control de contenido en la selección actual
Utilice un método ControlCollection con el nombre Add<clase de control> (donde clase de control es el nombre de clase del control de contenido que desea agregar, como AddRichTextContentControl) y con un único parámetro para el nombre del nuevo control.
En el ejemplo de código siguiente se utiliza el método ControlCollection.AddRichTextContentControl(String) para agregar un nuevo RichTextContentControl al principio del documento activo. Para ejecutar este código, agregue el código a la clase ThisAddIn del proyecto y llame al método AddRichTextControlAtSelection desde el controlador de eventos ThisAddIn_Startup.
Dim richTextControl1 As Microsoft.Office.Tools.Word.RichTextContentControl Private Sub AddRichTextControlAtSelection() Dim currentDocument As Word.Document = Me.Application.ActiveDocument currentDocument.Paragraphs(1).Range.InsertParagraphBefore() currentDocument.Paragraphs(1).Range.Select() ' Use the following line of code in projects that target the .NET Framework 4. Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim extendedDocument As Document = currentDocument.GetVstoObject() richTextControl1 = extendedDocument.Controls.AddRichTextContentControl("richTextControl1") richTextControl1.PlaceholderText = "Enter your first name" End Sub
private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1; private void AddRichTextControlAtSelection() { Word.Document currentDocument = this.Application.ActiveDocument; currentDocument.Paragraphs[1].Range.InsertParagraphBefore(); currentDocument.Paragraphs[1].Range.Select(); // Use the following line of code in projects that target the .NET Framework 4. Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument); // In projects that target the .NET Framework 3.5, use the following line of code. // Document extendedDocument = currentDocument.GetVstoObject(); richTextControl1 = extendedDocument.Controls.AddRichTextContentControl("richTextControl1"); richTextControl1.PlaceholderText = "Enter your first name"; }
Para agregar un control de contenido en un intervalo especificado
Utilice un método ControlCollection con el nombre Add<clase de control> (donde clase de control es el nombre de la clase de control de contenido que desea agregar, como AddRichTextContentControl) y con un parámetro Microsoft.Office.Interop.Word.Range.
En el ejemplo de código siguiente se utiliza el método ControlCollection.AddRichTextContentControl(Range, String) para agregar un nuevo RichTextContentControl al principio del documento activo. Para ejecutar este código, agregue el código a la clase ThisAddIn del proyecto y llame al método AddRichTextControlAtRange desde el controlador de eventos ThisAddIn_Startup.
Dim richTextControl2 As Microsoft.Office.Tools.Word.RichTextContentControl Private Sub AddRichTextControlAtRange() Dim currentDocument As Word.Document = Me.Application.ActiveDocument currentDocument.Paragraphs(1).Range.InsertParagraphBefore() ' Use the following line of code in projects that target the .NET Framework 4. Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim extendedDocument As Document = currentDocument.GetVstoObject() richTextControl2 = extendedDocument.Controls.AddRichTextContentControl( _ extendedDocument.Paragraphs(1).Range, "richTextControl2") richTextControl2.PlaceholderText = "Enter your first name" End Sub
private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl2; private void AddRichTextControlAtRange() { Word.Document currentDocument = this.Application.ActiveDocument; currentDocument.Paragraphs[1].Range.InsertParagraphBefore(); // Use the following line of code in projects that target the .NET Framework 4. Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument); // In projects that target the .NET Framework 3.5, use the following line of code. // Document extendedDocument = currentDocument.GetVstoObject(); richTextControl2 = extendedDocument.Controls.AddRichTextContentControl( currentDocument.Paragraphs[1].Range, "richTextControl2"); richTextControl2.PlaceholderText = "Enter your first name"; }
Para agregar un control de contenido basado en un control de contenido nativo
Utilice un método ControlCollection con el nombre Add<clase de control> (donde clase de control es el nombre de la clase de control de contenido que desea agregar, como AddRichTextContentControl) y con un parámetro Microsoft.Office.Interop.Word.ContentControl.
En el ejemplo de código siguiente se utiliza el método ControlCollection.AddRichTextContentControl(ContentControl, String) para crear un nuevo control RichTextContentControl por cada control de texto enriquecido nativo que está en el documento después de abrirlo. Para ejecutar este código, agréguelo a la clase ThisAddIn del proyecto.
Private richTextControls As New System.Collections.Generic.List _ (Of Microsoft.Office.Tools.Word.RichTextContentControl) Private Sub Application_DocumentOpen(ByVal Doc As Microsoft.Office.Interop.Word.Document) _ Handles Application.DocumentOpen If Doc.ContentControls.Count > 0 Then ' Use the following line of code in projects that target the .NET Framework 4. Dim extendedDocument As Document = Globals.Factory.GetVstoObject(Doc) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim extendedDocument As Document = Doc.GetVstoObject() Dim count As Integer = 0 For Each nativeControl As Word.ContentControl In Doc.ContentControls If nativeControl.Type = Word.WdContentControlType.wdContentControlRichText Then count += 1 Dim tempControl As Microsoft.Office.Tools.Word.RichTextContentControl = _ extendedDocument.Controls.AddRichTextContentControl(nativeControl, _ "VSTORichTextContentControl" + count.ToString()) richTextControls.Add(tempControl) End If Next nativeControl End If End Sub
private System.Collections.Generic.List <Microsoft.Office.Tools.Word.RichTextContentControl> richTextControls; private void Application_DocumentOpen(Microsoft.Office.Interop.Word.Document Doc) { if (Doc.ContentControls.Count > 0) { // Use the following line of code in projects that target the .NET Framework 4. Document extendedDocument = Globals.Factory.GetVstoObject(Doc); // In projects that target the .NET Framework 3.5, use the following line of code. // Document extendedDocument = Doc.GetVstoObject(); richTextControls = new System.Collections.Generic.List <Microsoft.Office.Tools.Word.RichTextContentControl>(); int count = 0; foreach (Word.ContentControl nativeControl in Doc.ContentControls) { if (nativeControl.Type == Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText) { count++; Microsoft.Office.Tools.Word.RichTextContentControl tempControl = extendedDocument.Controls.AddRichTextContentControl(nativeControl, "VSTORichTextControl" + count.ToString()); richTextControls.Add(tempControl); } } } }
En C#, además debe asociar el controlador de eventos Application_DocumentOpen al evento DocumentOpen.
this.Application.DocumentOpen += new Word.ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen);
Vea también
Conceptos
Automatizar Word con objetos extendidos
Información general sobre elementos y controles Host
Agregar controles a documentos de Office en tiempo de ejecución
Limitaciones de programación de elementos y controles Host
Métodos auxiliares para controles host