2011-04-11 57 views
6

在我的VSTO outlook插件中,我试图将一个按钮显示出来,当我右键单击文件夹。在我启动功能,我有这样的:文件夹中的C#(outlook加载项)上下文菜单

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

然后我有,处理程序...

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); 
} 

最后的处理程序点击....

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

我问题是如何将MAPIFolder FoldermyApp_FolderContextMenuDisplay发送到contextButton_Click

(如果可以做到这一点的另一种方式,我很开放的建议太)

回答

3

最简单的方法就是使用闭包,例如:

// 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); 
}; 

确保清理事件,如果需要的话。有一点需要注意的是,该文件夹的RCW现在可能具有“延长的使用期限”,因为封闭可能使其活动时间比以前更长(但OOM是非常重要的在不需要时手动释放RCW )

快乐编码。

相关问题