概要
VSTO で作成された Outlook アドインがあります。アドインには、Mail.Compose
リボン タイプ用の 1 つのリボン (ビジュアル デザイナー) があります。リボンタブControlIdType
は「カスタム」に設定されています。デザイナー コード以外のアドインの唯一のコードは、次Load
のリボンのハンドラーです。this.Context.CurrentItem
予期せず null を返しています。
コード
private void RibbonComposeMail_Load(object sender, RibbonUIEventArgs e)
{
try
{
var inspector = this.Context as Outlook.Inspector;
if (inspector == null)
{
throw new ApplicationException("Fail - Step 1");
}
var currentMailItem = inspector.CurrentItem as Outlook.MailItem;
if (currentMailItem == null)
{
throw new ApplicationException("Fail - Step 2");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
手順
- 下書きメールを開きます。リボンは正常にロードされます。
- 受信トレイから電子メールを開きます。
- 同じ下書きメールを開きます。手順 2 でリボンが失敗しました
inspector.CurrentItem
。null です。
ノート
- VS2010 で作成された Outlook 2007 および 2010 アドインと、VS2012 で作成された Outlook 2010 アドインを使用して、Outlook 2007、2010、および 2013 でこれをテストしました。すべて同じように動作します。
- 下書きメールを繰り返し開いても問題は発生しないようです。その間に Email.Read インスペクターを開く必要があります。
- リボン タブは
ControlidType
重要です。「カスタム」では問題が発生しますが、「Office」のデフォルト オプションでは問題は発生しません。 - シナリオをひっくり返して、リボンの種類を に設定しても
Mail.Read
、開く順序が [受信トレイ] > [下書き] > [受信トレイ (失敗)] と逆であれば、同じ結果になります。 - およびオブジェクトに対する呼び出しのすべての可能な順列は、違いはありませ
Marshal.ReleaseComObject
ん。inspector
currentMailItem