Outlook VSTO正确处理SelectionChange(当前双击崩溃Addin)
据我所知,您需要跟踪探险者的激活和停用。在激活期间,您需要为当前资源管理器添加SelectionChange事件处理程序。 这似乎非常适用于单击AppointmentItems。但当双击约会系列并选择单个约会时,它会使加载项崩溃 资料来源如下: 在班级层面Outlook VSTO正确处理SelectionChange(当前双击崩溃Addin),outlook,vsto,outlook-addin,Outlook,Vsto,Outlook Addin,据我所知,您需要跟踪探险者的激活和停用。在激活期间,您需要为当前资源管理器添加SelectionChange事件处理程序。 这似乎非常适用于单击AppointmentItems。但当双击约会系列并选择单个约会时,它会使加载项崩溃 资料来源如下: 在班级层面 private Outlook.Explorer currentExplorer = null; private Outlook.AppointmentItem currentAppointmentItem = null;
private Outlook.Explorer currentExplorer = null;
private Outlook.AppointmentItem currentAppointmentItem = null;
启动期间:
currentExplorer = this.Application.ActiveExplorer();
((Outlook.ExplorerEvents_10_Event)currentExplorer).Activate +=
new Outlook.ExplorerEvents_10_ActivateEventHandler(
Explorer_Activate);
currentExplorer.Deactivate += new
Outlook.ExplorerEvents_10_DeactivateEventHandler(
Explorer_Deactivate);
事件处理程序:
void Explorer_Activate()
{
currentExplorer.SelectionChange += new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(Selection_Change);
}
void Explorer_Deactivate()
{
currentExplorer.SelectionChange -= new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(Selection_Change); ;
}
private void Close_Explorer()
{
}
private void Selection_Change()
{
Outlook.MAPIFolder selectedFolder = currentExplorer.CurrentFolder;
if (currentExplorer.Selection.Count > 0)
{
Object selObject = currentExplorer.Selection[1];
if (selObject is Outlook.AppointmentItem)
{
currentAppointmentItem = (Outlook.AppointmentItem)selObject;
}
else
{
currentAppointmentItem = null;
}
}
}
我忽略了什么?取消注册的形式是否存在问题?尝试将Try/catch块添加到事件处理程序中。Outlook对象模型有时会给您带来不可预测的结果。值得添加它们并查找引发异常的位置
currentExplorer.Selection.Count
此外,您可以在事件中订阅
SelectionChange
事件,并且在激活或停用资源管理器时不在它们之间切换。每当打开新的资源管理器窗口时,无论是由于用户操作还是通过程序代码,都会触发该事件 尝试将Try/catch块添加到事件处理程序中。Outlook对象模型有时会给您带来不可预测的结果。值得添加它们并查找引发异常的位置
currentExplorer.Selection.Count
此外,您可以在事件中订阅
SelectionChange
事件,并且在激活或停用资源管理器时不在它们之间切换。每当打开新的资源管理器窗口时,无论是由于用户操作还是通过程序代码,都会触发该事件 我唯一添加的是NewInspector和InspectorClose事件的处理程序以及Marshal.ReleaseComObject()。我能想象的唯一一件事是,在调试过程中双击我遇到了某种竞争条件(因为双击也会触发Selection_Change事件)。但这只是一个猜测。我添加的唯一内容是NewInspector和InspectorClose事件的处理程序以及Marshal.ReleaseComObject()。我能想象的唯一一件事是,在调试过程中双击我遇到了某种竞争条件(因为双击也会触发Selection_Change事件)。但这只是一个猜测。在启用/停用资源管理器时,不需要添加和删除事件处理程序。您正在尝试支持多个探索者吗?在这种情况下,创建一个包装类,将Explorer
对象作为其成员,并将其方法用作事件处理程序。在激活/停用资源管理器时,无需添加和删除事件处理程序。您正在尝试支持多个探索者吗?在这种情况下,创建一个包装类,将Explorer
对象作为其成员,并将其方法用作事件处理程序。现在我改为NewExplorer/CloseExplorer方法(请参阅)问题仍然存在,我改为NewExplorer/CloseExplorer方法(请参阅)问题仍然存在必须从SelectionChange
事件处理程序中删除断点。只需从SelectionChange
事件处理程序中删除断点。