我正在寻找一个解决方案,我可以在触发方法时获取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元素。 ?
答案 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;
}