将 outlook Item 传递给 C# 中 Ribbon xml 的 onAction 属性中提到的函数
Pass outlook Item to function mentioned in onAction attribute of Ribbon xml in C#
我创建了一个简单的 VSTO outlook 加载项,其目的是在单击回复按钮时自动设置邮件主题。我在 MailItem 上添加了事件处理程序 Outlook.ItemEvents_10_ReplyEventHandler
。因此,无论何时单击回复按钮,都会触发回调函数,假设 func()
来自 ThisAddIn.cs class
。这么多效果很好。
然后,我使用功能区在上下文菜单中生成了一个按钮。目前,当我点击那个按钮时,它会显示一个 MessageBox
表示这个控件的 onAction
正在工作并且显示 MessageBox
的函数写在 MyRibbon.cs class
中。
我的 Ribbon.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
</ribbon>
<contextMenus>
<contextMenus>
<contextMenu idMso="ContextMenuMailItem">
<button id="AddSubject" label="Add a Subject" onAction= "AddSubject" />
</contextMenu>
<contextMenus>
</customUI>
AddSubject
中的函数定义 MyRibbon.cs
class
public void AddSubject(Office.IRibbonControl control)
{
if(control.Context is Outlook.Selection)
{
Console.WriteLine("Selection");
Outlook.MailItem mi = control.Context as Outlook.MailItem; //mi is null
Console.WriteLine("Go the mail");
Globals.ThisAddIn.CreateSubjectLine(mi);
}
}
在 ThisAddIn.cs class 中创建 Ribbon 对象的函数:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new Ribbon1();
}
现在,我不知道如何调用 ThisAddIn.cs class
的 func()
并从 AddSubject
回调函数中传递 object
(在本例中为 MailItem)在 MyRibbon.cs
class?
中定义
我试过参考这个 (https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ee692172(v=office.14)?redirectedfrom=MSDN) 文件,但我不能参考其中提到的项目。
我什至不确定我是否正确编写了 ribbon.xml 文件,它是否与我希望实现的目标一致。任何概念证明或参考资料也会有很大帮助。
IRibbonControl
对象将作为参数传递给您的事件处理程序。将 IRibbonControl.Context
转换为 Inspector
(然后使用 Inspector.CurrentItem
)或转换为 Explorer
(使用 Explorer.Selection
集合或 Explorer.InlineResponse
)
我创建了一个简单的 VSTO outlook 加载项,其目的是在单击回复按钮时自动设置邮件主题。我在 MailItem 上添加了事件处理程序 Outlook.ItemEvents_10_ReplyEventHandler
。因此,无论何时单击回复按钮,都会触发回调函数,假设 func()
来自 ThisAddIn.cs class
。这么多效果很好。
然后,我使用功能区在上下文菜单中生成了一个按钮。目前,当我点击那个按钮时,它会显示一个 MessageBox
表示这个控件的 onAction
正在工作并且显示 MessageBox
的函数写在 MyRibbon.cs class
中。
我的 Ribbon.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
</ribbon>
<contextMenus>
<contextMenus>
<contextMenu idMso="ContextMenuMailItem">
<button id="AddSubject" label="Add a Subject" onAction= "AddSubject" />
</contextMenu>
<contextMenus>
</customUI>
AddSubject
中的函数定义 MyRibbon.cs
class
public void AddSubject(Office.IRibbonControl control)
{
if(control.Context is Outlook.Selection)
{
Console.WriteLine("Selection");
Outlook.MailItem mi = control.Context as Outlook.MailItem; //mi is null
Console.WriteLine("Go the mail");
Globals.ThisAddIn.CreateSubjectLine(mi);
}
}
在 ThisAddIn.cs class 中创建 Ribbon 对象的函数:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new Ribbon1();
}
现在,我不知道如何调用 ThisAddIn.cs class
的 func()
并从 AddSubject
回调函数中传递 object
(在本例中为 MailItem)在 MyRibbon.cs
class?
中定义
我试过参考这个 (https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ee692172(v=office.14)?redirectedfrom=MSDN) 文件,但我不能参考其中提到的项目。
我什至不确定我是否正确编写了 ribbon.xml 文件,它是否与我希望实现的目标一致。任何概念证明或参考资料也会有很大帮助。
IRibbonControl
对象将作为参数传递给您的事件处理程序。将 IRibbonControl.Context
转换为 Inspector
(然后使用 Inspector.CurrentItem
)或转换为 Explorer
(使用 Explorer.Selection
集合或 Explorer.InlineResponse
)