2012-04-16 7 views
1

Я создаю надстройку MS-Word для компании, где я занимаюсь своей стажировкой.VSTO Word Add-In: Content Control Nesting

Я уже создал новую ленту с большим количеством SplitButtons и Buttons. Теперь, что я хочу сделать, это когда вы нажимаете одну из кнопок, элемент управления содержимым будет добавлен к слову doc. Это прекрасно работает для контроля контента Plain. Эти элементы управления содержимым имеют такие метки, как «sport/basketball/player/name», которые привязаны к элементу в XML-файле.

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 «игрок» с кнопками типа «имя», «номер трикотажа», «позиция», ..... Когда одна из основных кнопок нажата, сначала проверьте, с определенным именем уже существует. Если это не так, я сделаю один и добавлю к нему один простой элемент управления контентом.

Богатое содержание управления-> обычный контроль текст -> конец Rich контроль содержания

До сих пор так хорошо, это все идет хорошо, но с того момента, я хочу добавить еще один простой контроль содержания богатому контроль содержания этого выскакивает:

«текст управления Plain не могут быть вставлены вокруг других элементов управления или 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

В соответствии с сообщением, что ваш код пытается обернуть простой текстовый контроль вокруг все в элементе управления Rich Text (то есть существующий обычный контрольный текст). Исправьте объект диапазона, чтобы он не делал этого, например, сворачивает его только в точку внутри элемента управления расширенным текстом.

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