如果选择了一个或多个邮件,请禁用Outlook功能区按钮

时间:2015-10-06 13:07:07

标签: c#-4.0 outlook-addin

我正在开发一个outlook加载项,我使用可视化设计器添加了一个功能区,其中包含一些控件,如下拉列表和提交按钮以及文本框等。单击提交按钮时,我选择所选的邮件主题并传递给服务,< / p>

如果选择了多个邮件项,那么我想禁用我的按钮控件。在哪种情况下我需要编写代码来禁用按钮?。

我尝试了以下代码,此代码正在处理功能区加载,但我想在邮件项目选择更改时调用此方法。不知道如何调用选择更改事件。

private bool IsMoreMailSelected()
{
        bool isSelected = false;
        outlookObj = new Outlook.Application();
        Outlook.Selection mySelection = this.outlookObj.ActiveExplorer().Selection;
        int iCount = mySelection.Count;
        if (iCount > 1)
        {
            isSelected = true;
        }
        else
        {
            isSelected = false;
        }
        return isSelected;

    }

2 个答案:

答案 0 :(得分:0)

您需要处理Explorer类的SelectionChange事件,您可以在其中检查选择了多少项。当用户(以编程方式或通过用户界面)单击或切换到包含项目的其他文件夹时,也会发生此事件,因为Outlook会自动选择该文件夹中的第一个项目。有关示例代码,请参阅How to: Programmatically Determine the Current Outlook Item

在事件处理程序中,您可以调用IRibbonUI接口的InvalidateInvalidateControl方法,这些方法允许在Ribbon用户界面上使控件(或单个控件)的缓存值无效。因此,您将获得重新调用的Ribbon XML标记中定义的回调。有关详细信息,请参阅Overview of the IRibbonUI Object

getEnabled回调中,您只需返回false即可禁用该控件。功能区UI(也称为Fluent UI)在MSDN的以下系列文章中进行了深入介绍:

答案 1 :(得分:0)

处理ThisAddin类中的SelectionChange事件,例如:

    public partial class ThisAddIn
{
    Outlook.Explorer currentExplorer;        

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {   
        currentExplorer = this.Application.ActiveExplorer();
        currentExplorer.SelectionChange += new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(SelectionChangeEventHandler);
    }

    private void SelectionChangeEventHandler()
    {            
        bool buttonEnabled = false;
        if (this.Application.ActiveExplorer().Selection.Count == 1)
        {
            Object selObject = this.Application.ActiveExplorer().Selection[1];
            buttonEnabled = selObject is Outlook.MailItem;                
        }
        Globals.Ribbons.Ribbon1.MyButton.Enabled = buttonEnabled;
    }