次のような Outlook コンテキスト メニュー ボタンを作成する多くの例を見ています。
private void Application_ItemContextMenuDisplay(Microsoft.Office.Core.CommandBar CommandBar,
Selection Selection)
{
var button = (Office.CommandBarButton)CommandBar.Controls.
Add(Office.MsoControlType.msoControlButton, missing,
missing, missing, missing);
button.accName = "SowSelectedItem";
button.DescriptionText = "Show Selected item";
button.Caption = button.DescriptionText;
button.Tag = "ShowSelectedItem";
button.Click += ContextMenuItemClicked;
}
これは一度だけ正しく動作します。メニューにボタンが作成され、クリック可能になり、最初のアクセスでイベント ハンドラーが起動します。
ただし、メニューのアクティブ化は繰り返し発生し、実行されるたびに別のイベント ハンドラーが追加されたように見えます (ただし、メニューには 1 つのボタンしか表示されません)。クリック ハンドラーが蓄積されています (毎回新しいボタンを追加していますが)。
わかりましたので、私はできると思いました:
- フラグを設定し、ボタンを 1 回だけロードします (その後のアクティブ化では表示されません)。
- ボタンをキャッシュし、毎回追加します (以降のアクティベーションでも表示されません)。
- ボタンをキャッシュして、毎回表示および有効化します (表示されません)。
ここで何かが足りない気がします。正しいボタン アクティベーションと 1 つのイベント ハンドラー ヒットのみを取得するように、ボタンを接続するにはどうすればよいですか?