1

サンプルコードは次のとおりです。

    private Outlook.Application applicationObject;
    public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
    {
        MessageBox.Show("on connection");
        applicationObject = (Outlook.Application)application;
        applicationObject.Explorers.NewExplorer += new Microsoft.Office.Interop.Outlook.ExplorersEvents_NewExplorerEventHandler(Explorers_NewExplorer);
    }

    void Explorers_NewExplorer(Microsoft.Office.Interop.Outlook.Explorer Explorer)
    {
        MessageBox.Show("new explorer");
    }

「新しいウィンドウで開く」をクリックしても、NewExplorerイベントが発生しないため、「新しいエクスプローラー」メッセージが画面に表示されることはありません。

何が間違っている可能性がありますか?

4

1 に答える 1

1

イベントをサブスクライブしているExplorersインスタンスNewExplorerは、おそらくガベージコレクションされています。これが発生しないようにするには、インスタンス変数を介してそれへの参照を保持します。

private Outlook.Application applicationObject;
private Outlook.Explorers explorers;

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
    MessageBox.Show("on connection");
    applicationObject = (Outlook.Application)application;
    explorers = applicationObject.Explorers;
    explorers.NewExplorer += new Microsoft.Office.Interop.Outlook.ExplorersEvents_NewExplorerEventHandler(Explorers_NewExplorer);
}
于 2012-11-23T01:30:20.683 に答える