2012-04-16 69 views
1

我正在爲我正在做實習的公司製作一個MS-Word插件。VSTO Word插件:內容控制嵌套

我已經創建了一個新的功能區,其中有很多SplitButtonsButtons。 現在我想要做的是當你點擊一個按鈕的內容控件將添加到word文檔。 這適用於普通內容控件。這些內容控件具有標籤,如綁定到XML文件中元素的「sport/basketball/player/name」。

private void addSimpleContentControl(String tag, String placeholder) 
{ 
    try 
    { 
     contentControlPlain = Globals.ThisAddIn.Application.ActiveDocument.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlText); 
     contentControlPlain.Tag = tag; 
     contentControlPlain.SetPlaceholderText(null, null, placeholder); 
    } 
    catch (COMException) { }  
} 

現在讓我們來談談我的問題。我的一些元素可能會出現一次以上。所以我想創建的是一個Rich Content控件,它包含多個Plain內容控件。

所以我有一個SplitButton「玩家」包含「名」,「球衣號碼」,「位置」,...按鈕 當點擊下面的按鈕中的一個我第一次檢查,如果富文本控制具有特定的名稱已經存在。 如果不是,我做一個並添加一個簡單的內容控制它。

豐富的內容控制 - >純文本控制 - >豐富的內容控制的結束

到目前爲止好,這一切都很好,但是從目前看,我想其他純內容控件添加到豐富的內容控制這個彈出:

「純文本控件不能左右其他控件或XML元素插入」這裏是我的代碼爲純內容控件添加到豐富的內容控制。

private void addContentControlToRich(String tag, String placeholder,String title) 
{ 
    Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument; 

    foreach (Microsoft.Office.Interop.Word.ContentControl cc in doc.ContentControls) 
    { 
     if (cc.Title == title && cc.Type == Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText) 
     { 
      try 
      { 
       Microsoft.Office.Interop.Word.Range rng = cc.Range; 
       object oRng = rng; 
       contentControlPlain = doc.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlText, ref oRng); 
       contentControlPlain.Tag = tag; 
       contentControlPlain.SetPlaceholderText(null, null, placeholder); 
       contentControlPlain.LockContentControl = true; 

       break; 
      } 
      catch (COMException) { } 
     } 
    } 
} 

回答

0

按消息,你的代碼試圖環繞在富文本控制一切純文本控制(即現有的純文本控制)。修復您的範圍對象,以便它不會這樣做,例如將其摺疊到富文本控件中的某個點。

0

代替

contentControlPlain = doc.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlText, ref oRng); 

使用

contentControlPlain = richTextControl.Range.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlText, ref oRng); 

使用上述代碼用下面的代碼

Application.Selection.Start = lastControlinRichTextControl.Range.End+1; 

,並設置之前`ORNG = Application.Selection.Range