2011-07-28 3 views
13

Outlook 2010 추가 기능을 만들고 idMso = "contextMenuMailItem"에 대한 리본 메뉴에 컨텍스트 메뉴를 추가했습니다. 클릭하면 범주를 제거하고 싶지만 클릭 이벤트 처리기에서 MailItem으로 ctl.Context를 캐스팅하면 항상 null입니다.Outlook 리본 상황에 맞는 메뉴에서 현재 메일 항목을 얻는 방법

public bool btnRemoveCategory_IsVisible(Office.IRibbonControl ctl) 
{ 
    MailItem item = ctl.Context as MailItem; //Always null 
    if (item != null) 
     return (item != null && HasMyCategory(item)); 
    else 
     return false; 
} 

여기에 무슨 일이 일어나는 지 아는 사람이 있습니까? 감사!

답변

13

다음 링크는 몇 가지 통찰력을 제공 할 수 있습니다 컨트롤이 당신에게 당신이 (예 경위 객체에 대해) 정의되는 해당 Outlook 개체를 제공의

http://msdn.microsoft.com/en-us/library/ff863278.aspx

은 "상황을". 거기에서 컨텍스트 개체의 CurrentItem 속성을 참조하여 MailItem을 가져와야합니다. 예를 들어

,

public bool btnRemoveCategory_IsVisible(Office.IRibbonControl ctl) 
{ 
    var item = ctl.Context as Inspector; 
    var mailItem = item.CurrentItem as MailItem; 
    if (item != null) 
     return (item != null && HasMyCategory(item)); 
    else 
     return false; 
} 

는 희망이 도움이됩니다.

+2

이것은 읽기 창 b/c에서 작동하지 않습니다. 컨텍스트는 선택의 인스턴스입니다. 하지만 옳은 길로 날 잡았어, 고마워! – Keith

3

나는 동적 ComObject가 무엇인지 알아낼 수 없을 때 이것을 사용합니다.

당신이 내 IRibbonControl.Context는 단 하나 개의 항목이 선택에도 불구하고 선택도 실제로이었다처럼 거의 같은 일을 위해 그것을 필요로 Microsoft.VisualBasic

private void whatType(object obj) 
{   
    System.Diagnostics.Debug.WriteLine(Microsoft.VisualBasic.Information.TypeName(obj)); 
} 

에 대한 참조를 추가합니다. 클릭 이벤트가 선택한 메일 항목에서 상황에 맞는 메뉴에서 발사 후

4

당신은 메일 항목을 검색 할 수 있습니다 - 자세한 내용은

public bool btnRemoveCategory_IsVisible(Office.IRibbonControl ctl) 
{ 
     Explorer explorer = Globals.ThisAddIn.app.ActiveExplorer(); 
      if (explorer != null && explorer.Selection != null && explorer.Selection.Count > 0) 
      { 
       object item = explorer.Selection[1]; 
       if (item is MailItem) 
       { 
        MailItem mailItem = item as MailItem; 
       } 
     } 
} 

here를 방문하십시오.

관련 문제