2011-09-07 5 views
2

우리의 설치 당신이 바로과 같이 Outlook에서 이메일을 클릭하여 사용자 정의 컨텍스트 메뉴 :C# Outlook에서 추가 기능 - 상황에 맞는 메뉴 폐기

 private void _application_ItemContextMenuDisplay(Office.CommandBar CommandBar, Interop.Selection Selection) 
     { 
       var contextButton = (Office.CommandBarButton)CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, Temporary: true); 
       contextButton.Visible = true; 
       contextButton.Caption = "&My Context Menu"; 
       contextButton.Click += MyContextMenu_Click; 
     } 

이 방법은 Application.ItemContextMenuDisplay에 가입됩니다.

간혹 이벤트가 여러 번 발생하는 경우를 제외하고는 정상적으로 작동합니다. 다른 이메일을 빠르게 마우스 오른쪽 버튼으로 클릭 할 때 발생합니다.

그렇다면 내 임시 컨텍스트 메뉴 항목을 정리할 때 언제 좋은지 알 수 있습니다. 어딘가에서 C# 이벤트를 구독 취소해야합니다. 그렇게 할 의도가있는 곳은 어디입니까? (Marshal.ReleaseComObject으로 전화해야 할 수도 있습니다)

Visual Studio에서 VSTO 및 Outlook 2010 프로젝트 템플릿을 사용하고 있습니다. 나는 일반적으로 컨텍스트 메뉴를 커스터마이징하는 좋은 예를 많이 발견하지 못했다.

답변

1

Outlook 2010에서는 Microsoft가 Ribbon XML context menu customizations으로 이동하여 Outlook 2007 스타일의 CommandBars을 선호하는 이유가 여기에 있습니다. related SO post을 참조하십시오.

CommandBars에서 사용하는 리소스를 정리하는 경우 Application.ContextMenuClose 이벤트에 연결하여 리소스를 확보하고 청취자의 수신을 취소해야합니다. related SO post on disposing Outlook Context Menus을 참조하십시오.

CommandBars을 피하기 위해 최신 리본 XML 인터페이스를 사용하도록 코드를 리팩터링해야합니다.

+0

이 이벤트가 예상대로 발생하지 않는 것으로 나타났습니다 (연락처 또는 전자 메일 목록의 메뉴이기 때문에 생각합니다). 나는이 문제에 대해 더 이상 일하고 있지 않다. 결국'ItemContextMenuDisplay'의 시작 부분에 오래된 메뉴를 정리했다. 이것은 우리에게 큰 도움이되었습니다. – jonathanpeppers