2

리본로드시 ActiveInspector에 액세스 할 수 있습니까? Application.ActiveInspector()는 사용자 지정 양식을 사용할 때 적절한 값을 반환하지만 기본 연락처 양식에는 적합하지 않습니다.Application.ActiveInspector()가 Outlook에서 Null입니다. 리본로드

ActiveInspector(). CurrentItem의 속성 값에 따라 리본 단추를 사용자 지정하려면 ActiveInspector가 필요합니다.

답변

0

Inspectors 컬렉션의 NewInspector 이벤트를 처리 한 다음 리본로드 이벤트에서 액세스 할 수있는 정적 필드 (아마도 WeakReference를 사용해야 함)에서 그 이벤트를 유지할 수 있습니까?

Outlook을 사용하여 리본 사용자 지정을 수행하지는 않았지만 기존의 Tablet PC 제품 TEO의 검사관과 함께 광범위한 작업을 수행했습니다. 그들은 엉덩이에 통증이 있지만 당신이하고 싶지 않은 가장 중요한 것은 Outlook을 종료하거나 보류중인 편집을 취소하는 등의 이상한 문제가 발생하기 때문에 Inspector 참조를 너무 오래 사용하는 것입니다.

1

나는 열린 검사관의 목록을 유지한다는 점에서 위의 내용에 약간의 변형이 있습니다 (저는 검사관을 감싸서 목록에 보관합니다). 새 inspector 이벤트에 추가 한 후 유선 close 이벤트 close에서 제거합니다.

내 리본 코드에는 리본의 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; 
    } 

그런 다음 메일 항목에 관심이 등 을 필요로하지 않을 수 있습니다

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

76mel @ 확인 랩 관리자에게 얻을 수 FindOutlookInspector를 호출해야합니다 명시 적으로 O를에게 항목의 COM 참조를 감소하기 bjects. YMMV. –