Compartir a través de


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

  1. 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.

  2. Abra el Cuadro de herramientas y haga clic en la ficha Controles de Word.

  3. 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

  1. 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.

  2. 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.

  3. 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

Otros recursos

Programar complementos de nivel de aplicación

Programar personalizaciones de nivel de documento