2011-04-11 23 views
6

VSTO görünümde, bir klasöre sağ tıklarken görünecek bir düğme koymaya çalışıyorum. Benim Başlangıç ​​fonksiyonu, bu var:C# (görünüm eklentisi) klasörlerdeki bağlam menüsü

Outlook.Application myApp = new Outlook.ApplicationClass(); 
myApp.FolderContextMenuDisplay += new ApplicationEvents_11_FolderContextMenuDisplayEventHandler(myApp_FolderContextMenuDisplay); 
sonra

i bunun için işleyicisi var ...

void myApp_FolderContextMenuDisplay(CommandBar commandBar, MAPIFolder Folder) 
{ 
    var contextButton = commandBar.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton; 
    contextButton.Visible = true; 
    contextButton.Caption = "some caption..."; 
    contextButton.Click += new _CommandBarButtonEvents_ClickEventHandler(contextButton_Click); 
} 

ve nihayet tıklama için işleyici ....

void contextButton_Click(CommandBarButton Ctrl, ref bool CancelDefault) 
{ 
    //stuff here 
} 

Benim soru MAPIFolder Folder'u myApp_FolderContextMenuDisplay'dan contextButton_Click'a nasıl gönderirim?

cevap

3

kolay yolu, örneğin bir kapatma kullanmak sadece (bu başka bir yol yapılabilir, ben de öneriler için açığım):

// where Folder is a local variable in scope, such as code in post 
contextButton.Click += (CommandBarButton ctrl, ref bool cancel) => { 
    DoReallStuff(ctrl, Folder, ref cancel); 
}; 

temizlemek için emin olun Gerekirse etkinlik. Dikkat edilmesi gereken bir şey de, Klasörün RCW'sinin artık daha uzun bir süre daha uzun süre canlı kalmasını sağlayabileceğinden "uzatılmış ömür" ye sahip olabileceğidir (ancak OOM, gerektiğinde RCW'leri manuel olarak serbest bırakmak için çok önemli .)

Mutlu kodlama.

İlgili konular