locked
FAQs: 当在Outlook Explorer中右击邮件时,如何向上下文菜单添加按钮? RRS feed

  • 问题

  • 为了帮助大家更好地学习 VSTO 技术,微软论坛技术支持团队编辑了一些列的 "VSTO 常见问题及解答" 精华帖。

    本帖的主题是:当在Outlook Explorer中右击邮件时,如何向上下文菜单添加按钮?

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

    如果您想阅读更多的 "VSTO 常见问题及解答",请打开索引页面:
    http://social.msdn.microsoft.com/Forums/zh-CN/vstudiozhchs/thread/ed10f3de-40bb-4f16-81f9-25ace1f152ba

     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月28日 9:15

答案

  • 这个问题的方法取决于我们正在工作的Outlook版本?

    (1)     如果当前的版本是Outlook 2007,通过注册Application.ItemContextMenuDisplay事件,我们可以容易地实现这个目标。然后有一个带有两个参数的函数来处理该事件,一个是CommandBar对象,另一个是选中的邮件。为了向上下文菜单添加按钮,仅调用CommandBar.Controls.Add()

    请参考这个链接:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/74e3fbaf-5806-4684-b410-65a0720386e8/

    (2)     Outlook 2007对象模型, Application.ItemContextMenuDisplay事件是首次被引进。如果是Outlook 2003,为了这个目标,我们必须监听CommandBars.OnUpdate事件。但是在事件处理程序中,没有那种代表相应的命令栏的控件。我们需要通过下面的表达式来得到命令栏:Application.CommandBars[“Context Menu”]

    我们可以从下面的链接中获得代码示例:http://www.outlookcode.com/codedetail.aspx?id=314

    请注意:微软不支持在Office 2003中进行“上下文菜单”自定义项。使用这个代码会有一定的风险。由于Outlook 2003产品实现的改变,解决方案可能会在某处中断。官方上,自定义Outlook 2003的上下文菜单是不被支持的。

    相关的论坛帖子:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/74e3fbaf-5806-4684-b410-65a0720386e8/

    更多的有关VSTOFAQ,请看:

    http://social.msdn.microsoft.com/Forums/zh-CN/vstudiozhchs/thread/ed10f3de-40bb-4f16-81f9-25ace1f152ba


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月28日 9:15
  • 添加VB版本的代码,

    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

            AddHandler Application.ItemContextMenuDisplay, AddressOf Application_ItemContextMenuDisplay

    End Sub

     

    Sub Application_ItemContextMenuDisplay(ByVal CommandBar As Microsoft.Office.Core.CommandBar, ByVal Selection As Microsoft.Office.Interop.Outlook.Selection)

            Dim cb As Office.CommandBarButton

            cb = CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, , , , True)

            cb.Visible = True

            cb.Caption = "NewButton"

    End Sub


     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月28日 9:16

全部回复

  • 这个问题的方法取决于我们正在工作的Outlook版本?

    (1)     如果当前的版本是Outlook 2007,通过注册Application.ItemContextMenuDisplay事件,我们可以容易地实现这个目标。然后有一个带有两个参数的函数来处理该事件,一个是CommandBar对象,另一个是选中的邮件。为了向上下文菜单添加按钮,仅调用CommandBar.Controls.Add()

    请参考这个链接:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/74e3fbaf-5806-4684-b410-65a0720386e8/

    (2)     Outlook 2007对象模型, Application.ItemContextMenuDisplay事件是首次被引进。如果是Outlook 2003,为了这个目标,我们必须监听CommandBars.OnUpdate事件。但是在事件处理程序中,没有那种代表相应的命令栏的控件。我们需要通过下面的表达式来得到命令栏:Application.CommandBars[“Context Menu”]

    我们可以从下面的链接中获得代码示例:http://www.outlookcode.com/codedetail.aspx?id=314

    请注意:微软不支持在Office 2003中进行“上下文菜单”自定义项。使用这个代码会有一定的风险。由于Outlook 2003产品实现的改变,解决方案可能会在某处中断。官方上,自定义Outlook 2003的上下文菜单是不被支持的。

    相关的论坛帖子:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/74e3fbaf-5806-4684-b410-65a0720386e8/

    更多的有关VSTOFAQ,请看:

    http://social.msdn.microsoft.com/Forums/zh-CN/vstudiozhchs/thread/ed10f3de-40bb-4f16-81f9-25ace1f152ba


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月28日 9:15
  • 添加VB版本的代码,

    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

            AddHandler Application.ItemContextMenuDisplay, AddressOf Application_ItemContextMenuDisplay

    End Sub

     

    Sub Application_ItemContextMenuDisplay(ByVal CommandBar As Microsoft.Office.Core.CommandBar, ByVal Selection As Microsoft.Office.Interop.Outlook.Selection)

            Dim cb As Office.CommandBarButton

            cb = CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, , , , True)

            cb.Visible = True

            cb.Caption = "NewButton"

    End Sub


     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月28日 9:16