使用内容控件保护文档的各个部分

当你保护文档的一部分时,将阻止用户更改或删除文档该部分中的内容。 通过使用内容控件,有以下几种方法来保护 Microsoft Office Word 文档的各个部分:

  • 你可以保护内容控件。

  • 你可以保护不在内容控件中的文档的一部分。

    适用于: 本主题中的信息适用于 Word 的文档级项目和 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。

保护内容控件

可以通过在设计时或运行时在文档级项目中设置控件的属性来防止用户编辑或删除内容控件。

还可以使用 VSTO 外接程序项目保护在运行时添加到文档中的内容控件。 有关详细信息,请参阅 “如何:向 Word 文档添加内容控件”。

若要在设计时保护内容控件

  1. 在 Visual Studio 设计器中托管的文档中,选择要保护的内容控件。

  2. “属性” 窗口中,设置以下一个或两个属性:

    • 若要防止用户编辑控件,请将 LockContents 设置为 True

    • 若要防止用户删除控件,请将 LockContentControl 设置为 True

  3. 单击“确定”。

在运行时保护内容控件

  1. LockContents 内容控件的属性设置为 true 以防止用户编辑控件,并将该属性设置为 LockContentControltrue 以防止用户删除控件。

    下面的代码示例演示如何使用文档级项目的两个不同 RichTextContentControl 对象的 LockContentsLockContentControl 属性。 若要运行此代码,将此代码添加到项目的 ThisDocument 类中,然后从 AddProtectedContentControls 事件处理程序调用 ThisDocument_Startup 方法。

    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;
    }
    

    下面的代码示例演示了如何使用 VSTO 外接程序项目的两个不同 RichTextContentControl 对象的 LockContentsLockContentControl 属性。 若要运行此代码,将此代码添加到项目的 ThisAddIn 类中,然后从 AddProtectedContentControls 事件处理程序调用 ThisAddIn_Startup 方法。

    private Microsoft.Office.Tools.Word.RichTextContentControl deletableControl;
    private Microsoft.Office.Tools.Word.RichTextContentControl editableControl;
    
    private void AddProtectedContentControls()
    {
        Microsoft.Office.Tools.Word.Document vstoDocument = 
            Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        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;
    }
    

保护不在内容控件中的文档的一部分

可通过将文档的某一区域放置到 GroupContentControl 中,阻止用户更改该区域。 这在以下应用场景中很有用:

  • 想要保护不包含内容控件的区域。

  • 想要保护其中已包含内容控件,但想要保护的文本或其他项不在内容控件中的区域。

注意

如果创建包含嵌入式内容控件的 GroupContentControl,则不会自动保护嵌入的内容控件。 若要防止用户编辑嵌入的内容控件,请使用 控件的 LockContents 属性。

若要在设计时保护文档的某一区域

  1. 在 Visual Studio 设计器中托管的文档中,选择要保护的区域。

  2. 在功能区上,单击 “开发人员” 选项卡。

    注意

    如果看不到 “开发人员” 选项卡,则必须首先显示它。 有关详细信息,请参阅 “如何:在功能区上显示开发人员”选项卡。

  3. “控件 ”组中,单击“ ”下拉列表按钮,然后单击“ ”。

    不会在你的项目的 ThisDocument 类中自动生成包含受保护区域的 GroupContentControl。 表示组控件的边框在设计时可见,但在运行时没有可见边框。

在运行时保护文档的区域

  1. 以编程方式选择想要保护的区域,然后再调用 AddGroupContentControl 方法来创建 GroupContentControl

    下面针对于文档级项目的代码示例将文本添加到文档中第一个段落中,选择第一个段落,然后实例化 GroupContentControl。 若要运行此代码,将此代码添加到项目的 ThisDocument 类中,然后从 ProtectFirstParagraph 事件处理程序调用 ThisDocument_Startup 方法。

    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");
    }
    

    下面针对于 VSTO 外接程序项目的代码示例将文本添加到活动文档中第一个段落,选择第一个段落,然后实例化 GroupContentControl。 若要运行此代码,将此代码添加到项目的 ThisAddIn 类中,然后从 ProtectFirstParagraph 事件处理程序调用 ThisAddIn_Startup 方法。

           private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    
           private void ProtectFirstParagraph()
           {
               Microsoft.Office.Tools.Word.Document vstoDocument =
                   Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
               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");
           }