2017-02-09 3 views
0

I-cursorがメソッドを実行する瞬間にオブジェクトを取得できるソリューションを探しています(メソッドはリボンのボタンで実行されます)。 Word 2010で)。C#OfficeがI-Cursorのオブジェクトを取得する

ケース: RichTextContentControl要素があります.I-Cursorをテキスト内に置いてマウスで押すと、RichTextContentControl要素が表示されます。次に、リボンからのメソッドボタンを押した後、それはいくつかのアクションI-カーソルがあった場所、特定RichTextContentControl要素を取得し、実行する必要があります。

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

をこれまでのところ、私は上記のことをしようと、いくつかのreasearchをしましたが、それを唯一私がマウスI-カーソルがあった場所、は(入力カーソル)ではないで押されたリボンからボタンの種類を提供します。

私は誰かが同様の問題とそのためのいくつかのヒントを持っていた願っています。

編集:

私は次のコードで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"); 
     } 
    } 

は、どのように私は私のカーソルがに、ここで私は、それぞれクリックしたリッチテキスト要素に対応することができ、「これ。」 ?

+0

これはVSTOソリューションですか?これを試しましたか?アプリケーション選択?システム.__ comobjectおよびその特定のではないrichtextcontrolelementを:はい、私はそれを試してみましたし、私は戻って取得 –

+0

(this.ApplicationはVSTOソリューションが実行されているWordアプリケーションを返す必要があります)。 – knnhcn

+0

は実行時に、すべてのWordを使用すると、 'システム.__ comobject'として報告されますと相互に作用しているオブジェクト。 'this.Application.Selection'の上にカーソルを置くと、** Dynamic View **のオプションが表示されるはずです。 –

答えて

0

はI-カーソルは次のコードであったオブジェクト(例えばRichTextContentControl要素)を取得するための作業溶液を得ました。基本的にはContentControlにから.TAGを取得し、ドキュメント内のすべての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; 
        } 
       } 
      } 
     } 
    } 

編集

働いaswell後。 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; 


    } 
関連する問題