HOW TO:將內容控制項加入至 Word 文件

在文件層級的 Word 專案中,您可以於設計階段或執行階段,將內容控制項加入至專案中的文件。 在應用程式層級的 Word 專案中,您可以在執行階段將內容控制項加入至任何開啟的文件。

**適用於:**本主題中的資訊適用於 Word 2007 和 Word 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

本主題將說明下列工作:

  • 在設計階段加入內容控制項

  • 在文件層級專案中,於執行階段加入內容控制項

  • 在應用程式層級專案中,於執行階段加入內容控制項

如需內容控制項的詳細資訊,請參閱內容控制項

在設計階段加入內容控制項

在文件層級專案中,有數個方式可於設計階段將控制項加入至文件:

  • 從 [工具箱] 的 [Word 控制項] 索引標籤加入內容控制項。

  • 使用與在 Word 中加入原生 (Native) 內容控制項相同的方式,將內容控制項加入至文件。

  • 從 [資料來源] 視窗將內容控制項拖曳至文件。 這在您要於控制項建立的同時將控制項繫結至資料時相當有用。 如需詳細資訊,請參閱 HOW TO:將物件的資料填入文件HOW TO:將資料庫的資料填入文件

注意事項注意事項

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 Visual Studio 設定

若要使用工具箱將內容控制項加入至文件

  1. 在裝載於 Visual Studio 設計工具的文件中,將游標放在您要加入內容控制項的位置,或選取您要用內容控制項取代的文字。

  2. 開啟 [工具箱],然後按一下 [Word 控制項] 索引標籤。

  3. 以下列其中一種方式,加入控制項:

    • 按兩下 [工具箱] 中的內容控制項。

    • 按一下 [工具箱] 中的內容控制項,然後按下 ENTER 鍵。

    • 將內容控制項從 [工具箱] 拖曳至文件。 內容控制項會加入至文件中的目前選取位置,而不是滑鼠指標的位置。

注意事項注意事項

您無法使用 [工具箱] 加入 GroupContentControl。 您只能在 Word 中或在執行階段時加入 GroupContentControl

注意事項注意事項

Visual Studio 不針對 Word 2010 專案在工具箱中提供核取方塊內容控制項。 如果將核取方塊內容控制項加入到文件,您必須以程式設計方式建立 ContentControl 物件。 如需詳細資訊,請參閱 內容控制項

若要在 Word 中將內容控制項加入至文件

  1. 在裝載於 Visual Studio 設計工具的文件中,將游標放在您要加入內容控制項的位置,或選取您要用內容控制項取代的文字。

  2. 按一下 [功能區] 上的 [開發人員] 索引標籤。

    注意事項注意事項

    如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。 如需詳細資訊,請參閱 HOW TO:在功能區顯示開發人員索引標籤

  3. 按一下 [控制項] 群組中代表所要加入內容控制項的圖示。

在文件層級專案中,於執行階段加入內容控制項

您可以在專案中使用 ThisDocument 類別之 Controls 屬性的方法,在執行階段以程式設計的方式將內容控制項加入至文件。 每個方法都有三個多載,可供您以下列方式加入內容控制項:

  • 在目前選取位置加入控制項。

  • 在指定的範圍加入控制項。

  • 加入以文件中的原生內容控制項為基礎的控制項。

關閉文件時,動態建立的內容控制項不會持續保存在文件中。 不過,原生內容控制項會保留在文件中。 下次文件開啟時,您可以重新建立以原生內容控制項為基礎的內容控制項。 如需詳細資訊,請參閱 在執行階段將控制項加入至 Office 文件

注意事項注意事項

如果將核取方塊內容控制項加入到 Word 2010 專案中的文件,您必須建立 ContentControl 物件。 如需詳細資訊,請參閱 內容控制項

若要在目前選取位置加入內容控制項

  • 使用名為 Add<控制項類別> (其中 <控制項類別> 是您要加入的內容控制項類別名稱,如 AddRichTextContentControl),且具有單一參數來代表新控制項名稱的 ControlCollection 方法。

    下列程式碼範例會使用 ControlCollection.AddRichTextContentControl(String) 方法,將新的 RichTextContentControl 加入至文件的開頭。 若要執行這個程式碼,請將程式碼加入至專案的 ThisDocument 類別中,並從 ThisDocument_Startup 事件處理常式呼叫 AddRichTextControlAtSelection 方法。

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

若要在指定的範圍加入內容控制項

  • 使用名為 Add<控制項類別> (其中 <控制項類別> 是您要加入的內容控制項類別名稱,如 AddRichTextContentControl),且具有 Microsoft.Office.Interop.Word.Range 參數的 ControlCollection 方法。

    下列程式碼範例會使用 ControlCollection.AddRichTextContentControl(Range, String) 方法,將新的 RichTextContentControl 加入至文件的開頭。 若要執行這個程式碼,請將程式碼加入至專案的 ThisDocument 類別中,並從 ThisDocument_Startup 事件處理常式呼叫 AddRichTextControlAtRange 方法。

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

若要加入以原生內容控制項為基礎的內容控制項

  • 使用名為 Add<控制項類別> (其中 <控制項類別> 是您要加入的內容控制項類別名稱,如 AddRichTextContentControl),且具有 Microsoft.Office.Interop.Word.ContentControl 參數的 ControlCollection 方法。

    下列程式碼範例會針對文件中的每個原生 Rich Text 控制項,使用 ControlCollection.AddRichTextContentControl(ContentControl, String) 方法建立新的 RichTextContentControl。 若要執行這個程式碼,請將程式碼加入至專案的 ThisDocument 類別中,並從 ThisDocument_Startup 事件處理常式呼叫 CreateRichTextControlsFromNativeControls 方法。

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

在應用程式層級專案中,於執行階段加入內容控制項

您可以使用應用程式層級的增益集,在執行階段以程式設計的方式將內容控制項加入至任何開啟的文件。 若要這麼做,請產生以開啟文件為基礎的 Document 主項目,然後使用這個主項目之 Controls 屬性的方法。 每個方法都有三個多載,可供您以下列方式加入內容控制項:

  • 在目前選取位置加入控制項。

  • 在指定的範圍加入控制項。

  • 加入以文件中的原生內容控制項為基礎的控制項。

關閉文件時,動態建立的內容控制項不會持續保存在文件中。 不過,原生內容控制項會保留在文件中。 下次文件開啟時,您可以重新建立以原生內容控制項為基礎的內容控制項。 如需詳細資訊,請參閱在 Office 文件中保存動態控制項

如需在應用程式層級專案中產生主項目的詳細資訊,請參閱在應用程式層級增益集的執行階段中擴充 Word 文件和 Excel 活頁簿

注意事項注意事項

如果將核取方塊內容控制項加入到 Word 2010 專案中的文件,您必須建立 ContentControl 物件。 如需詳細資訊,請參閱 內容控制項

若要在目前選取位置加入內容控制項

  • 使用名為 Add<控制項類別> (其中 <控制項類別> 是您要加入的內容控制項類別名稱,如 AddRichTextContentControl),且具有單一參數來代表新控制項名稱的 ControlCollection 方法。

    下列程式碼範例會使用 ControlCollection.AddRichTextContentControl(String) 方法,將新的 RichTextContentControl 加入至使用中文件的開頭。 若要執行這個程式碼,請將程式碼加入至專案的 ThisAddIn 類別中,並從 ThisAddIn_Startup 事件處理常式呼叫 AddRichTextControlAtSelection 方法。

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

若要在指定的範圍加入內容控制項

  • 使用名為 Add<控制項類別> (其中 <控制項類別> 是您要加入的內容控制項類別名稱,如 AddRichTextContentControl),且具有 Microsoft.Office.Interop.Word.Range 參數的 ControlCollection 方法。

    下列程式碼範例會使用 ControlCollection.AddRichTextContentControl(Range, String) 方法,將新的 RichTextContentControl 加入至使用中文件的開頭。 若要執行這個程式碼,請將程式碼加入至專案的 ThisAddIn 類別中,並從 ThisAddIn_Startup 事件處理常式呼叫 AddRichTextControlAtRange 方法。

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

若要加入以原生內容控制項為基礎的內容控制項

  • 使用名為 Add<控制項類別> (其中 <控制項類別> 是您要加入的內容控制項類別名稱,如 AddRichTextContentControl),且具有 Microsoft.Office.Interop.Word.ContentControl 參數的 ControlCollection 方法。

    下列範例程式碼會使用 ControlCollection.AddRichTextContentControl(ContentControl, String) 方法,在文件開啟之後,對文件中每一個原生 Rich Text 控制項建立新的 RichTextContentControl。 若要使用這個程式碼,請將程式碼加入至專案中的 ThisAddIn 類別。

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

    若為 C#,您還必須將 Application_DocumentOpen 事件處理常式附加至 DocumentOpen 事件。

    this.Application.DocumentOpen +=
        new Word.ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen);
    

請參閱

概念

使用擴充物件自動化 Word

主項目和主控制項概觀

在執行階段將控制項加入至 Office 文件

主項目和主控制項的程式設計限制

主控制項的 Helper 方法

其他資源

應用程式層級增益集程式設計

文件層級自訂程式設計