2

ボタン付きのツールバーを作成し、HelloWorldonclickイベントハンドラーをそのボタンに割り当てるMSProject 2007アドイン(VS 2010、WinXP)を作成しています。

問題

インストール後、プラグインはボタンを作成し、クリックイベントを接続し、すべてが正常に機能します。ただし、数分後、onclickイベントは不可解に発火を停止します。

私が読んだすべてのことは、私が行ったグローバルスコープでツールバー/ボタンを定義する必要があることを示しています。ただし、onclickイベントは、実行時間の数分後もフックが解除されます。

私が経験しているもう1つの奇妙な症状は、COMアドインダイアログボックスで切り替えたときに(動作が停止した後)、次の奇妙なメッセージが表示されることです。

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

...これは奇妙なことです。この単純なアプリケーションでは、COMオブジェクトをリリースしていないからです。

助言がありますか?


コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using MSProject = Microsoft.Office.Interop.MSProject;
using Office = Microsoft.Office.Core;



namespace Test_Project2007_Addin
{
    public partial class ThisAddIn
    {
        private Office.CommandBar cmdBar;   // Hello World Toolbar
        private Office.CommandBarButton cmdBtn01; // Hellow World Button

        private string cmdBarName   = "Hello World Toolbar";
        private string cmdBtn01Name = "HelloWorld";

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

            // Define the toolbar

            cmdBar = this.Application.CommandBars.Add( 
               cmdBarName, Office.MsoBarPosition.msoBarTop, false, true );
            cmdBar.Visible           = true;
            
            // Define the button
            
            cmdBtn01                 = cmdBar.Controls.Add( Office.MsoControlType.msoControlButton, missing, missing, missing, true ) as Office.CommandBarButton;
            cmdBtn01.FaceId          = 422;
            cmdBtn01.Caption         = "Hello World";
            cmdBtn01.Tag             = cmdBtn01Name;
            cmdBtn01.DescriptionText = "Hello World";
            cmdBtn01.TooltipText     = "Hello World";
            cmdBtn01.Click          += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler( HelloWorld );

        }

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

        }

        private void HelloWorld( Microsoft.Office.Core.CommandBarButton barButton, ref bool someBool ) {
            System.Windows.Forms.MessageBox.Show( "Hello, World!" );
        }



        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}
4

2 に答える 2

2

CommandBarsをプライベートメンバー変数として追加してみてください。たぶんCommandBars、ガベージコレクションを取得しています。これでRCWの問題が修正されるかどうかを確認してください。修正されていない場合は、別のプラグインである可能性があります。

これがうまくいかない場合はApplication、ローカルメンバーを作成してみてください。申し訳ありませんが、これをテストするためのMSProjectがありません。

private CommandBars cmdBars; // app command bars

private void ThisAddIn_Startup( object sender, System.EventArgs e ) {
  //..
  cmdBars = this.Application.CommandBars;
  cmdBar = cmdBars.Add(cmdBarName, Office.MsoBarPosition.msoBarTop, false, true );
  //..
}
于 2012-05-02T20:21:40.657 に答える
-1

これを試してください:

cmdBar = this.Application.ActiveExplorer().CommandBars.Add(

それ以外の:

cmdBar = this.Application.CommandBars.Add(
于 2015-08-17T07:02:23.723 に答える