如何在VSTO Outlook C#中在功能区上显示表单区域按钮

时间:2019-07-08 11:21:44

标签: c# outlook vsto

我使用窗体区域创建了一个窗体,该窗体使用VSTO Outlook C#接受用户输入。 如图所示,打开此表单的按钮位于“消息”按钮附近:

Button service desk showed near message

我希望已开发的自定义功能区(例如,MY DESK-> Service Desk)中的此按钮

是否可以将此按钮移到我想要的功能区上?

2 个答案:

答案 0 :(得分:0)

您可以在外接程序中创建自定义功能区UI,在其中可以通过指定内置控件idMso来重复内置控件。 VSTO提供了两种自定义Fluent UI(又称为Ribbon UI)的方法:

要查找控件ID,您可以下载Office 2016 Help Files: Office Fluent User Interface Control Identifiers。另外,您可以通过导航到Customize ribbon页并查看弹出的提示来在Outlook中对其进行检查。

此外,您可以在任何地方放置自定义功能区控件,并调用以下代码以显示自定义UI:

myitem.GetInspector.SetCurrentFormPage("Namespace.FormRegionClass")

SetCurrentFormPage中使用的名称应为您的自定义区域的完整类名。

答案 1 :(得分:0)

谢谢@Eugene,您的回答给了我解决我问题的提示

首先,我用代码打开新邮件:

Application oApp = Globals.ThisAddIn.Application;
        NameSpace oNs = oApp.GetNamespace("MAPI");
        MAPIFolder oInbox = oNs.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
        Items oItems = oInbox.Items;
        MailItem oForm = oItems.Add("IPM.Note");
        oForm.Display(false);

然后使用“ ActiveInspector()”代替“ GetInspector”,并使用我的类名进行设置

"oApp.ActiveInspector().SetCurrentFormPage("NameSpace.ClassName");"

单击按钮的完整代码:

private void btnOpenMailForm_Click(object sender, RibbonControlEventArgs e)
    {
        Application oApp = Globals.ThisAddIn.Application;
        NameSpace oNs = oApp.GetNamespace("MAPI");
        MAPIFolder oInbox = oNs.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
        Items oItems = oInbox.Items;
        MailItem oForm = oItems.Add("IPM.Note");
        oForm.Display(false);  
        oApp.ActiveInspector().SetCurrentFormPage("NameSpace.ClassName");
    }

这将通过功能区按钮的按钮单击打开我的自定义外观表单。