簡體   English   中英

VSTO Word內容控件-在運行時添加多個RichTextContentControls

[英]VSTO Word Content Control - adding multiple RichTextContentControls at run time

我正在創建一個Word加載項,該加載項允許用戶在Word文檔中選擇各種文本,然后單擊功能區上的按鈕,該按鈕將使用內容控件(富文本)包裝該文本。 最終,這些內容控件將被映射到XML。

到目前為止的代碼是這樣的:

public partial class Ribbon1
    {
        private RichTextContentControl titleRichTextControl;

        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {

        }

        private void addTitle_Click(object sender, RibbonControlEventArgs e)
        {
            AddRichTextControlAtSelection();
        }


        private void AddRichTextControlAtSelection()
        {
            word.Document currentDocument = Globals.ThisAddIn.Application.ActiveDocument;

           currentDocument.ActiveWindow.Selection.Range.Select();

           Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);

            titleRichTextControl = extendedDocument.Controls.AddRichTextContentControl("titleRichTextControl");
            titleRichTextControl.PlaceholderText = "Enter the title";
            titleRichTextControl.Title = "Title";
            titleRichTextControl.Tag = "title";

        }

    }

所有這些都很好,並且第一次單擊該按鈕即可。 但是,如果有多個“標題”(在這種情況下)需要添加,並且用戶再次按下該按鈕,則會引發錯誤:

The control cannot be added because a control with the name titleRichTextControl already exists in the Controls collection.

很明顯為什么會抱怨,但是我想不出允許多次單擊按鈕來生成相同類型(富文本內容控件)和相同名稱(例如“ title”)的多個內容控件的正確方法。 )。

任何人都可以指出我正確的方向。

好的,這就是我最終的做法:

private void addTitle_Click(object sender, RibbonControlEventArgs e)
        {
            AddRichTextControlAtSelection();
        }


        int count = 0;
        private void AddRichTextControlAtSelection()
        {
            word.Document currentDocument = Globals.ThisAddIn.Application.ActiveDocument;

            Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);

            if (currentDocument.ContentControls.Count > 0)
            {

                currentDocument.ActiveWindow.Selection.Range.HighlightColorIndex = word.WdColorIndex.wdYellow;
                currentDocument.ActiveWindow.Selection.Range.Select();

                richTextControls = new List<RichTextContentControl>(); 

                foreach (word.ContentControl nativeControl in currentDocument.ContentControls)
                {
                    if (nativeControl.Type == Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText) 
                    {
                        count++;
                        RichTextContentControl tempControl = extendedDocument.Controls.AddRichTextContentControl("VSTORichTextControl" + count.ToString());
                        richTextControls.Add(tempControl);
                        tempControl.Title = "Title";
                        tempControl.Tag = "title";

                        break;
                     }
                }
            }

            else
            {
                RichTextContentControl VSTORichTextControl;
                VSTORichTextControl = extendedDocument.Controls.AddRichTextContentControl("VSTORichTextControl");
                VSTORichTextControl.PlaceholderText = "Enter the DM title";
                VSTORichTextControl.Title = "Title";
                VSTORichTextControl.Tag = "title";
            }

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM