我正在开发一个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;
}
答案 0 :(得分:0)
您需要处理Explorer类的SelectionChange事件,您可以在其中检查选择了多少项。当用户(以编程方式或通过用户界面)单击或切换到包含项目的其他文件夹时,也会发生此事件,因为Outlook会自动选择该文件夹中的第一个项目。有关示例代码,请参阅How to: Programmatically Determine the Current Outlook Item。
在事件处理程序中,您可以调用IRibbonUI接口的Invalidate或InvalidateControl方法,这些方法允许在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;
}