5

シンプルな MS Word アドインを作成しようとしています (主に機能を調べるため)。アドインはカスタム タスク パネルを追加し、リボンにグループを追加します。リボン コントロールには、カスタム タスク パネルの表示を制御するためのチェックボックスと、ドキュメントを開くためのボタンが含まれています。MS Word でアドインをテストすると、タスク ペインが正しく表示され、チェックボックスが正しく機能します。問題は、ボタンをクリックして新しいドキュメントを開くとすぐに、作業ウィンドウが非表示になり、チェックボックスが作業ウィンドウの表示を制御しなくなったことです。何がうまくいかないのですか?カスタム作業ウィンドウを表示し続けるにはどうすればよいですか?

アドインの単純なバージョンを次に示します。

public partial class ThisAddIn
{
    private MyUserControl _myUserControl;
    private CustomTaskPane _myCustomTastPane;
    private OpenFileDialog _dialog;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        _dialog = new OpenFileDialog { Filter = "Doc File (*.rtf)|*.rtf", RestoreDirectory = true };
        _myUserControl = new MyUserControl();
        _myCustomTastPane = this.CustomTaskPanes.Add(_myUserControl, "My Task Pane");
        _myCustomTastPane.Visible = true;

        Globals.Ribbons.MyRibbon.ShowPane.Click += ShowClicked;
        Globals.Ribbons.MyRibbon.LoadDoc.Click += LoadFile;
    }

    private void ShowClicked(object sender, RibbonControlEventArgs ribbonControlEventArgs)
    {
        _myCustomTastPane.Visible = Globals.Ribbons.MyRibbon.ShowPane.Checked;
    }

    void LoadFile(object sender, RibbonControlEventArgs e)
    {
        if (_dialog.ShowDialog() != DialogResult.OK) return;

        object missing = Missing.Value;
        object myFalse = false;
        object myTrue = true;
        object format = WdSaveFormat.wdFormatRTF;
        object fileToOpen = _dialog.FileName;

        Application.Documents.Open(ref fileToOpen, ref myFalse, ref myFalse, ref myFalse, ref missing, ref missing, ref missing, ref missing,
                                                                ref missing, ref missing, ref missing, ref myTrue, ref myFalse, ref missing, ref missing, ref missing);
    }

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

    #region VSTO generated code
    //....
    #endregion
}

簡単にするために、リボンの定義は省略しました。これは、実際には単なるボタンとチェックボックスであるためです。クラスの内容はそれほど重要ではないため、MyUserControl の定義も省いています (私のデモ バージョンでは、ラベル付きの単純なクラスしかありません)。

4

1 に答える 1

6

MS Word では、カスタム タスク ペインはドキュメントごとのウィンドウです ( MSDN リファレンス を参照してください)。新しいドキュメントを開くと、タスク ペインのコレクションが異なります。永続的な作業ウィンドウを開いたままにしておく場合は、以下に示すように、ドキュメントを開く/閉じるイベントを監視して、自分で管理する必要があります。

MSDNから...

Word 2007 または InfoPath 2007 のカスタム作業ウィンドウを作成すると、カスタム作業ウィンドウは 1 つのドキュメントに対してのみ表示されます。これらのアプリケーションの作業ウィンドウは、ドキュメントをホストするウィンドウに関連付けられていますが、ドキュメントごとにこのウィンドウの異なるインスタンスがあります。
...
複数のドキュメントのカスタム作業ウィンドウを表示する場合は、ユーザーが新しいドキュメントを作成するか、既存のドキュメントを開くときに、カスタム作業ウィンドウの新しいインスタンスを作成できます。たとえば、Word 2007 アドインでNewDocumentまたはイベントのハンドラーを作成して、新しいドキュメントまたは開いたドキュメントで表示されるカスタム作業ウィンドウの新しいインスタンスを作成できます。DocumentOpen

于 2012-05-23T20:22:37.267 に答える