C#Office获取I-Cursor所在的对象

时间:2017-02-09 08:44:52

标签: c# visual-studio visual-studio-2015 ms-word

我正在寻找一个解决方案,我可以在触发方法时获取I光标所在的对象(该方法使用Word 2010中的功能区中的按钮运行)。

案例: 有一个RichTextContentControl元素,当我用鼠标按下它时,I-Cursor停留在文本中。然后,在按功能区中的方法按钮后,它应该采用I-cursor所在的某个RichTextContentControl元素并执行一些操作:

internal void addLock(Object sender)    //object as RichTextContentControl where I-cursor was!
    {
        sender.LockContents = true;
        sender.LockContentControl = true;
    }

到目前为止,我尝试了上面的内容并做了一些研究,但是这只给了我用鼠标按下的功能区中的按钮类型,不是I-Cursor所在的位置(键入光标)

我希望有人有类似的问题和一些提示。

编辑:

我使用以下代码生成RichTextContenControlElement:

public partial class ThisAddIn
{
    private RichTextContentControl richTextControl = null;
    private int index = 0;


    internal void SetRichTextControlOnDocument()
    {

        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
        index++;

        string name = "MyRichTextBoxControl_"+System.Convert.ToString(index);
        Word.Selection wordSelection = this.Application.Selection;

        if (!string.IsNullOrEmpty(wordSelection.Text.ToString()))
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {

                this.richTextControl = vstoDocument.Controls.AddRichTextContentControl(selection.Range, name);
                this.richTextControl.LockContentControl = true;
                this.richTextControl.LockContents = true;
            }
        }
        else
        {
            MessageBox.Show("No text was selceted to lock!", "Error");
        }
    }

如何使用“this”来分别点击I光标所在的RichText元素。 ?

1 个答案:

答案 0 :(得分:0)

通过以下代码获得了I-Cursor所在的Object(例如RichTextContentControl元素)的工作解决方案。基本上从ContentControl获取.Tag并循环遍历文档中的所有ContentControl并选择具有匹配标记的那个:

        internal void remLock()
    {
        vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);

        Word.Selection selection = this.Application.Selection;

        String s; = selection.ParentContentControl.Tag.ToString();

        remByTag(s);

    }

    private void remByTag(String ccTag)
    {

        if (vstoDocument.ContentControls.Count != 0)
        {
            foreach (Word.ContentControl cc in vstoDocument.ContentControls)
            {
                if (cc.Type == Word.WdContentControlType.wdContentControlRichText)
                {
                    if (cc.Tag.ToString() == ccTag)
                    {
                        cc.LockContentControl = false;
                        cc.LockContents = false;

                        MessageBox.Show("Lock has been removed");
                        return;
                    }
                }
            }
        }
    }

修改

以下工作了。如果单击RichTextContentControl元素,事件会将其指向本地RichTextContentControl:

        private Microsoft.Office.Interop.Word.ContentControl rt = null;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {

        this.Application.ActiveDocument.ContentControlOnEnter += ActiveDocument_ContentControlOnEnter;

    }



    private void ActiveDocument_ContentControlOnEnter(Word.ContentControl cc)
    {
        cc.Type = Word.WdContentControlType.wdContentControlRichText;

        this.rt = cc;


    }