ボタン付きのツールバーを作成し、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
}
}