简体   繁体   English

在另一个ContentControl之后插入ContentControl

[英]Inserting a ContentControl after another ContentControl

In our VSTO Word 2010 Addin, we are trying to insert a RichTextControl after a given other ContentControl. 在我们的VSTO Word 2010插件中,我们试图在给定的其他ContentControl之后插入RichTextControl。 We have tried this: 我们已经尝试过了:

    public ContentControl AddContentControl(WdContentControlType type, int position)
    {
        Paragraph paragraphBefore = null;
        if (position == 0)
        {
            if (WordDocument.Paragraphs.Count == 0)
            {
                WordDocument.Paragraphs.Add();
            }
            paragraphBefore = WordDocument.Paragraphs.First;
        }
        else
        {
            paragraphBefore = Controls.ElementAt(position - 1).Range.Paragraphs.Last;
        }

        object start = paragraphBefore.Range.End;
        object end = paragraphBefore.Range.End + 1;

        paragraphBefore.Range.InsertParagraphAfter();

        Range rangeToUse = WordDocument.Range(ref start, ref end);

        ContentControl newControl = _ContentControl = _WordDocument.ContentControls.Add(type, rangeToInsert);

        Controls.Insert(position, newControl);

        OnNewContentControl(newControl, position);

        return newControl.ContentControl;
    }

which works fine, unless the control that is before the one we want to insert has an empty paragraph at the end. 除非在我们要插入的控件之前的控件的末尾有一个空的段落,否则它将正常工作。 If that is the case, the new ContentControl is inserted within the last control. 在这种情况下,新的ContentControl将插入到最后一个控件中。

How can we avoid this? 我们如何避免这种情况?

A little late for an answer, but this is what I did to handle this case: 答案有点迟了,但这就是我为处理这种情况所做的:

I think it's basically what you did, but I insert a paragraph and then move to by a Paragraph unit. 我认为基本上是您要做的,但是我先插入一个段落,然后再按一个段落单元移动到该段落。 Seems to work in my case. 似乎在我的情况下工作。

Globals.ThisDocument.Paragraphs.First.Range.Select();

var cc = Globals.ThisDocument.Controls.AddRichTextContentControl(Guid.NewGuid().ToString());

var newRange = cc.Range;
object count = 1;
newRange.Move(Unit: Word.WdUnits.wdParagraph, Count: ref count);

Globals.ThisDocument.Paragraphs.Add();
newRange.Move(Unit: Word.WdUnits.wdParagraph, Count: ref count);

var cc2 = Globals.ThisDocument.Controls.AddRichTextContentControl(newRange, Guid.NewGuid().ToString());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM