2

リボンの読み込み時にActiveInspectorにアクセスできますか? Application.ActiveInspector()は、カスタムフォームを使用すると適切な値を返しますが、既定の連絡フォームは使用しません。Application.ActiveInspector()がOutlookのリボンロードでNullです

ActiveInspector()のプロパティ値に応じてリボンボタンをカスタマイズするには、ActiveInspectorが必要です。

答えて

0

InspectorsコレクションのNewInspectorイベントを処理し、リボンロードイベントからアクセスできる静的フィールド(WeakReferenceを使用するはずです)でそのイベントを保持できますか?

私はOutlookでリボンのカスタマイズを行っていませんが、古いTablet PC製品のTEOの検査官との広範な作業を行っています。彼らはうまくいっているが、あなたがしたくない主なことは、Outlookをシャットダウンしたり保留中の編集を取り消したりすることであらゆる種類の奇妙な問題が発生するため、Inspectorの参照をあまりに長くぶら下げることです。

1

私は開いている検査官のリストを維持しています(私は検査官を包んでリストに残します)。 新しいインスペクターイベントに追加し、ワイヤードアップクローズイベントクローズで削除します。

リボンコードには、リボンのcontrol.contextを使用してインスペクタを検索する静的メソッドFindOutlookInspectorがあります。などが挙げられる。これらの線に沿って

何か..

OutlookInspectorは私のラップインスペクタークラスですが、あなたがそれを必要としないことがあり また、私は唯一の私ができるリボンコードに続いてメールアイテム

void _inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) { 
    OutlookItem olItem = null; 
    try { 
     object newitem = Inspector.CurrentItem; 
     olItem = new OutlookItem(newitem); 
     if (olItem.Class == Outlook.OlObjectClass.olMail && olItem.MessageClass == "IPM.Note") { 

      OutlookInspector existingWindow = FindOutlookInspector(Inspector); 

      if (existingWindow == null) { 
       OutlookInspector window = new OutlookInspector(Inspector); 

       window.Close += new EventHandler(WrappedWindow_Close); 
       _windows.Add(window); 
      } 

     } catch (Exception ex) { 
      throw ex; 
     } 
    } 

    void WrappedWindow_Close(object sender, EventArgs e) { 
     OutlookInspector window = (OutlookInspector) sender; 
     window.Close -= WrappedWindow_Close; 
     _windows.Remove(window); 
    } 

    internal static OutlookInspector FindOutlookInspector(object window) { 
     foreach(OutlookInspector inspector in _windows) { 
      if (inspector.Window == window) { 
       return inspector; 
      } 
     } 
     return null; 
    } 

気に明示的項目0のCOM参照を減少することを確認してください76mel @包まインスペクタ

OutlookInspector window = ThisAddIn.FindOutlookInspector(control.Context); 
+0

を取得するためにFindOutlookInspectorを呼び出しますbjects。 YMMV。 –