2017-02-09 3 views
0

Я ищу решение, где я могу получить объект, где I-курсор находится в момент запуска метода (метод запускается с помощью кнопки из ленты в Word 2010).C# Office, получающий объект, где I-Cursor

Корпус: Элемент RichTextContentControl, когда я нажимаю на него мышь, I-Cursor остается в тексте. Затем, после нажатия кнопки метод с ленты, он должен считать, что определенный RichTextContentControl элемент, где I-курсор был и делать какие-то действия:

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

До сих пор я пытался с этим выше и сделал некоторые Reasearch, но только дает мне тип кнопки из ленты, которую я нажал с помощью мыши, не там, где был I-Курсор (ввод текста).

Надеюсь, у кого-то были подобные проблемы и некоторые намеки на это.

Edit:

Я генерации 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"); 
     } 
    } 

Как я могу обратиться к RichText элемент, который я нажал на, соответственно, где я курсор, с «это.» ?

+0

Является ли это решение VSTO? Вы пробовали это. Assetition.Selection? (this.Application должен вернуть приложение Word, в котором работает решение VSTO) –

+0

Да, я пробовал это, и я возвращаюсь: system .__ comobject и не тот определенный richtextcontrolelement. – knnhcn

+0

Во время выполнения все объекты Word, с которыми вы взаимодействуете, будут представлены как 'system .__ comobject'. Если вы наводите курсор на 'this.Application.Selection', вы должны увидеть опцию ** Dynamic view **, которая может быть полезна. –

ответ

0

Получил рабочее решение для получения объекта (например, элемент RichTextContentControl), где I-Курсор был со следующим кодом. В основном получение .tag от ContentControl и пробегает по всему ContentControls в документе, и выбирая один с согласующим тегом:

 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 элемент событие asigns его местным 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; 


    } 
Смежные вопросы