Cómo: Proteger elementos de documentos mediante controles de contenido

Al proteger un elemento de un documento, impide que los usuarios cambien o eliminen el contenido de dicho elemento. Existen varias maneras de proteger los elementos de un documento de Microsoft Office Word 2007 mediante controles de contenido:

  • Puede proteger un control de contenido.

  • Puede proteger un elemento de un documento que no esté incluido en un control de contenido.

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.

Proteger un control de contenido

Puede impedir que los usuarios modifiquen o eliminen un control de contenido estableciendo las propiedades del control en un proyecto en el nivel del documento en tiempo de diseño o de ejecución.

También se pueden proteger los controles de contenido que se agregan a un documento en tiempo de ejecución utilizando un proyecto de nivel de la aplicación. Para obtener más información, vea Cómo: Agregar controles de contenido a documentos de Word.

Para proteger un control de contenido en tiempo de diseño

  1. En el documento que se hospeda en el diseñador de Visual Studio, seleccione el control de contenido que desea proteger.

  2. En la ventana Propiedades, establezca una o ambas de las propiedades siguientes:

    • Para evitar que los usuarios editen el control, establezca LockContents en True.

    • Para evitar que los usuarios eliminen el control, establezca LockContentControl en True.

  3. Haga clic en Aceptar.

Para proteger un control de contenido en tiempo de ejecución

  • Establezca la propiedad LockContents del control de contenido en true para evitar que los usuarios editen el control y la propiedad LockContentControl en true para evitar que los usuarios lo eliminen.

    En el ejemplo de código siguiente se muestra el uso de las propiedades LockContents y LockContentControl de dos objetos RichTextContentControl diferentes en un proyecto en el nivel del documento. Para ejecutar este código, agréguelo a la clase ThisDocument del proyecto y llame al método AddProtectedContentControls desde el controlador de eventos ThisDocument_Startup.

    Dim deletableControl As Microsoft.Office.Tools.Word.RichTextContentControl
    Dim editableControl As Microsoft.Office.Tools.Word.RichTextContentControl
    
    Private Sub AddProtectedContentControls()
        Me.Paragraphs(1).Range.InsertParagraphBefore()
        Dim range1 As Word.Range = Me.Paragraphs(1).Range
    
        deletableControl = Me.Controls.AddRichTextContentControl(range1, _
            "deletableControl")
        deletableControl.PlaceholderText = "You can delete this control, " & _
            "but you cannot edit it"
        deletableControl.LockContents = True
    
        range1.InsertParagraphAfter()
        Dim range2 As Word.Range = Me.Paragraphs(2).Range
    
        editableControl = Me.Controls.AddRichTextContentControl(range2, _
            "editableControl")
        editableControl.PlaceholderText = "You can edit this control, " & _
            "but you cannot delete it"
        editableControl.LockContentControl = True
    End Sub
    
    private Microsoft.Office.Tools.Word.RichTextContentControl deletableControl;
    private Microsoft.Office.Tools.Word.RichTextContentControl editableControl;
    
    private void AddProtectedContentControls()
    {
        this.Paragraphs[1].Range.InsertParagraphBefore();
        Word.Range range1 = this.Paragraphs[1].Range;
    
        deletableControl = this.Controls.AddRichTextContentControl(range1,
            "deletableControl");
        deletableControl.PlaceholderText = "You can delete this control, " +
            "but you cannot edit it";
        deletableControl.LockContents = true;
    
        range1.InsertParagraphAfter();
        Word.Range range2 = this.Paragraphs[2].Range;
    
        editableControl = this.Controls.AddRichTextContentControl(range2,
            "editableControl");
        editableControl.PlaceholderText = "You can edit this control, " +
            "but you cannot delete it";
        editableControl.LockContentControl = true;
    }
    

    En el ejemplo de código siguiente se muestra el uso de las propiedades LockContents y LockContentControl de dos objetos RichTextContentControl diferentes en un proyecto en el nivel de la aplicación. Para ejecutar este código, agregue el código a la clase ThisAddIn del proyecto y llame al método AddProtectedContentControls desde el controlador de eventos ThisAddIn_Startup.

    Dim deletableControl As Microsoft.Office.Tools.Word.RichTextContentControl
    Dim editableControl As Microsoft.Office.Tools.Word.RichTextContentControl
    
    Private Sub AddProtectedContentControls()
        ' Use the following line of code in projects that target the .NET Framework 4.
        Dim VstoDocument As Microsoft.Office.Tools.Word.Document = _
            Globals.Factory.GetVstoObject(Me.Application.ActiveDocument)
    
        ' In projects that target the .NET Framework 3.5, use the following line of code.
        ' Dim vstoDocument As Microsoft.Office.Tools.Word.Document = _
        '     Me.Application.ActiveDocument.GetVstoObject()
    
        vstoDocument.Paragraphs(1).Range.InsertParagraphBefore()
        Dim range1 As Word.Range = vstoDocument.Paragraphs(1).Range
    
        deletableControl = vstoDocument.Controls.AddRichTextContentControl(range1, _
            "deletableControl")
        deletableControl.PlaceholderText = "You can delete this control, " & _
            "but you cannot edit it"
        deletableControl.LockContents = True
    
        range1.InsertParagraphAfter()
        Dim range2 As Word.Range = vstoDocument.Paragraphs(2).Range
    
        editableControl = vstoDocument.Controls.AddRichTextContentControl(range2, _
            "editableControl")
        editableControl.PlaceholderText = "You can edit this control, " & _
            "but you cannot delete it"
        editableControl.LockContentControl = True
    End Sub
    
    private Microsoft.Office.Tools.Word.RichTextContentControl deletableControl;
    private Microsoft.Office.Tools.Word.RichTextContentControl editableControl;
    
    private void AddProtectedContentControls()
    {
        // Use the following line of code in projects that target the .NET Framework 4.
        Microsoft.Office.Tools.Word.Document vstoDocument = 
            Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
        // In projects that target the .NET Framework 3.5, use the following line of code.
        // Microsoft.Office.Tools.Word.Document vstoDocument = 
            //this.Application.ActiveDocument.GetVstoObject();
    
        vstoDocument.Paragraphs[1].Range.InsertParagraphBefore();
        Word.Range range1 = vstoDocument.Paragraphs[1].Range;
    
        deletableControl = vstoDocument.Controls.AddRichTextContentControl(range1,
            "deletableControl");
        deletableControl.PlaceholderText = "You can delete this control, " +
            "but you cannot edit it";
        deletableControl.LockContents = true;
    
        range1.InsertParagraphAfter();
        Word.Range range2 = vstoDocument.Paragraphs[2].Range;
    
        editableControl = vstoDocument.Controls.AddRichTextContentControl(range2,
            "editableControl");
        editableControl.PlaceholderText = "You can edit this control, " +
            "but you cannot delete it.";
        editableControl.LockContentControl = true;
    }
    

Proteger un elemento de un documento que no está incluido en un control de contenido

Puede evitar que los usuarios cambien un área de un documento si incluye el área en un objeto GroupContentControl. Esto resulta útil en los escenarios siguientes:

  • Desea proteger un área que no contiene controles de contenido.

  • Desea proteger un área que ya contiene controles de contenido, pero el texto u otros elementos que desea proteger no están incluidos en los controles de contenido.

Nota

Si crea un control GroupContentControl que contiene controles de contenido incrustados, estos controles de contenido incrustados no se protegerán automáticamente. Para evitar que los usuarios editen un control de contenido incrustado, utilice la propiedad LockContents del control.

Para proteger un área de un documento en tiempo de diseño

  1. En el documento que se hospeda en el diseñador de Visual Studio, seleccione el área que desea proteger.

  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 botón de lista desplegable Grupo y, a continuación, haga clic en Agrupar.

    En la clase ThisDocument del proyecto se genera automáticamente un objeto GroupContentControl que contiene la región protegida. Un borde que representa el control de grupo está visible en tiempo de diseño, pero en tiempo de ejecución no hay ningún borde visible.

Para proteger un área de un documento en tiempo de ejecución

  • Seleccione mediante programación el área que desea proteger y, a continuación, llame al método AddGroupContentControl para crear un objeto GroupContentControl.

    En el ejemplo de código siguiente para un proyecto de nivel de documento, se agrega texto al primer párrafo del documento activo, se selecciona el primer párrafo y, a continuación, se crea una instancia de un objeto GroupContentControl. Para ejecutar este código, agréguelo a la clase ThisDocument del proyecto y llame al método ProtectFirstParagraph desde el controlador de eventos ThisDocument_Startup.

    Dim groupControl1 As Microsoft.Office.Tools.Word.GroupContentControl
    
    Private Sub ProtectFirstParagraph()
        Me.Paragraphs(1).Range.InsertParagraphBefore()
        Dim range1 As Word.Range = Me.Paragraphs(1).Range
        range1.Text = "You cannot edit or change the formatting of text " & _
                "in this paragraph, because this paragraph is in a GroupContentControl."
        range1.Select()
    
        groupControl1 = Me.Controls.AddGroupContentControl("groupControl1")
    End Sub
    
    private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    
    private void ProtectFirstParagraph()
    {
        this.Paragraphs[1].Range.InsertParagraphBefore();
        Word.Range range1 = this.Paragraphs[1].Range;
    
        range1.Text = "You cannot edit or change the formatting of text " +
            "in this sentence, because this sentence is in a GroupContentControl.";
        range1.Select();
        groupControl1 = this.Controls.AddGroupContentControl("groupControl1");
    }
    

    En el ejemplo de código siguiente para un proyecto de nivel de aplicación, se agrega texto al primer párrafo del documento activo, se selecciona el primer párrafo y, a continuación, se crea una instancia de un objeto GroupContentControl. Para ejecutar este código, agréguelo a la clase ThisAddIn del proyecto y llame al método ProtectFirstParagraph desde el controlador de eventos ThisAddIn_Startup.

    Dim groupControl1 As Microsoft.Office.Tools.Word.GroupContentControl
    
    Private Sub ProtectFirstParagraph()
        ' Use the following line of code in projects that target the .NET Framework 4.
        Dim VstoDocument As Microsoft.Office.Tools.Word.Document = _
            Globals.Factory.GetVstoObject(Me.Application.ActiveDocument)
    
        ' In projects that target the .NET Framework 3.5, use the following line of code.
        ' Dim vstoDocument As Microsoft.Office.Tools.Word.Document = _
        '     Me.Application.ActiveDocument.GetVstoObject()
    
        VstoDocument.Paragraphs(1).Range.InsertParagraphBefore()
    
        Dim range1 As Word.Range = VstoDocument.Paragraphs(1).Range
        range1.Text = "You cannot edit or change the formatting of text " & _
                "in this paragraph, because this paragraph is in a GroupContentControl."
        range1.Select()
    
        groupControl1 = VstoDocument.Controls.AddGroupContentControl("groupControl1")
    End Sub
    
    private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    
    private void ProtectFirstParagraph()
    {
        // Use the following line of code in projects that target the .NET Framework 4.
        Microsoft.Office.Tools.Word.Document vstoDocument =
            Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
        // In projects that target the .NET Framework 3.5, use the following line of code.
        // Microsoft.Office.Tools.Word.Document vstoDocument = 
        //     this.Application.ActiveDocument.GetVstoObject();
    
        vstoDocument.Paragraphs[1].Range.InsertParagraphBefore();
    
        Word.Range range1 = vstoDocument.Paragraphs[1].Range;
        range1.Text = "You cannot edit or change the formatting of text " +
            "in this sentence, because this sentence is in a GroupContentControl.";
        range1.Select();
    
        groupControl1 = vstoDocument.Controls.AddGroupContentControl("groupControl1");
    }
    

Vea también

Tareas

Cómo: Agregar controles de contenido a documentos de Word

Conceptos

Automatizar Word con objetos extendidos

Controles de contenido

Información general sobre elementos y controles Host

Limitaciones de programación de elementos y controles Host

Agregar controles a documentos de Office en tiempo de ejecución

Métodos auxiliares para controles host