2012-04-16 91 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