2

c# で VSTO を使用してアドインを作成しています。

タスク ペイン用のユーザー コントロールを作成しました。次のコントロールがあります: 1) テキスト ボックス - Word ドキュメント フォルダー用、2) ボタン - テキスト ボックスに指定されたフォルダーを参照するため、3) ツリー ビュー コントロールテキスト ボックスに指定したパスにあるすべてのファイルとフォルダーを表示するには、

これらは正常に動作しています。ツリー ビューからドキュメントを選択すると、タスク ペインなしでドキュメントが開きます。

ドキュメント選択用に次のコードを書きました。

private void treeFiles_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        string fullPath = e.Node.Name;
        string checkExt = Path.GetExtension(fullPath);
        if (checkExt.Contains("doc"))
        {
            //System.Diagnostics.Process.Start(fullPath);
            object fileName = fullPath;
            object readOnly = false;
            object isVisible = true;
            // Here is the way to handle parameters you don't care about in .NET
            object missing = System.Reflection.Missing.Value;

            // Make word visible, so you can see what's happening         
            Globals.MainPage.Application.Visible = true;

            Word.Document aDoc = Globals.MainPage.Application.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible);

            // Activate the document so it shows up in front
            aDoc.Activate();
        }
    }

メインファイルに次のコードを書きました:

    HomeControl objHomeControl;

    public static Microsoft.Office.Tools.CustomTaskPane taskPaneValue;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        objHomeControl = new HomeControl();
        taskPaneValue = this.CustomTaskPanes.Add(objHomeControl, "File task pane");
        taskPaneValue.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionLeft;
        taskPaneValue.VisibleChanged += new EventHandler(taskPaneValue_VisibleChanged);
        taskPaneValue.Visible = true;
        this.Application.DocumentOpen += new Word.ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen);

    }

    void Application_DocumentOpen(Word.Document Doc)
    {
        HomeControl objHomeControl1 = new HomeControl();
        taskPaneValue = this.CustomTaskPanes.Add(objHomeControl1, "File task pane",Doc.ActiveWindow);
        taskPaneValue.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionLeft;
        taskPaneValue.VisibleChanged += new EventHandler(taskPaneValue_VisibleChanged);
        taskPaneValue.Visible = true;
    }

    void taskPaneValue_VisibleChanged(object sender, EventArgs e)
    {
        Globals.Ribbons.MyRibbon.tgleButton.Checked = taskPaneValue.Visible;

    }

    public Microsoft.Office.Tools.CustomTaskPane TaskPane
    {
        get
        {
            return taskPaneValue;
        }
    }

ノードをダブルクリックすると、ドキュメントが開きますが、追加 (UserControl) が再初期化されます。すべての値がリセットされ、リボンからのオン/オフの追加が機能しません。ドキュメント全体で UserControl 共有のコピーを 1 つ作成する方法を教えてください。

私もこれを試しました

    void Application_DocumentOpen(Word.Document Doc)
    {
        taskPaneValue = this.CustomTaskPanes.Add(objHomeControl, "File task pane",Doc.ActiveWindow);
        taskPaneValue.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionLeft;
        taskPaneValue.VisibleChanged += new EventHandler(taskPaneValue_VisibleChanged);
        taskPaneValue.Visible = true;
    }

新しいドキュメントで作業ウィンドウを開きます。しかし、どこでもクリックできません。親ドキュメントをクリックすると、次の例外メッセージが表示されます。

「基になる RCW から分離された COM オブジェクトは使用できません。」

手伝ってください。

4

0 に答える 0