Email 如何确定是否显示outlook项目

Email 如何确定是否显示outlook项目,email,post,outlook,vsto,Email,Post,Outlook,Vsto,我正在Visual Studio 2010中使用VSTO和VB.net构建Outlook加载项 现在我正在处理邮件和邮件。是否有方法确定当前是否显示邮件项目或帖子项目 我要做的就是关闭所有显示(打开)的项目(如果有),然后再将它们从当前文件夹移动到另一个文件夹 我在谷歌上搜索了很多,但是我找不到我问题的答案 提前感谢。您只需检查属性,查看的集合中是否存在邮件项目,以及是否有与之关联的具有相同EntryID的邮件项目。下面是我过去使用过的一个有用的助手方法 注意:这项技术 内部静态bool Has

我正在Visual Studio 2010中使用VSTO和VB.net构建Outlook加载项

现在我正在处理邮件和邮件。是否有方法确定当前是否显示邮件项目或帖子项目

我要做的就是关闭所有显示(打开)的项目(如果有),然后再将它们从当前文件夹移动到另一个文件夹

我在谷歌上搜索了很多,但是我找不到我问题的答案


提前感谢。

您只需检查属性,查看的集合中是否存在邮件项目,以及是否有与之关联的具有相同
EntryID的邮件项目。下面是我过去使用过的一个有用的助手方法

注意:这项技术

内部静态bool HasInspector(Outlook.MailItem-MailItem)
{
bool=false;
试一试{
if(mailItem==null | | string.IsNullOrEmpty(mailItem.EntryID))返回HasInspector;//短路无效参数或新邮件消息(没有EntryID,因为它未保存)
foreach(Globals.ThisAddIn.Application.Inspector中的Outlook.Inspector)
{
Outlook.MailItem currentMailItem=inspector.CurrentItem作为Outlook.MailItem;
if(currentMailItem!=null&&!string.IsNullOrEmpty(currentMailItem.EntryID))
{
HasInspector=Globals.ThisAddIn.Application.Session.compareentryId(currentMailItem.EntryID,mailItem.EntryID);
Marshal.ReleaseComObject(currentMailItem);currentMailItem=null;//资源RCW清理
}
}         
}
catch{}//尝试请求邮件项的检查器
退货检查员;
}

到目前为止,我找到的唯一解决方案是循环检查
应用程序。检查人员
(请记住,这是一个基于1的集合,而不是基于0的集合),并查看是否有任何检查人员的
CurrentItem
与您的邮件项目相同

您不能使用
MailItem.GetInspector
,因为如果邮件项目不存在检查器窗口,那么这将为邮件项目创建一个检查器窗口


希望有人能够提供一个更好的解决方案,如果有的话

循环应用程序中的检查器。检查器集合,对于每个检查器,读取CurrentItem属性(它可以返回不同类型的对象,例如MailItem、ContactItem等)。读取EntryID属性,并使用Namespace.compareentryId将其与相关项的条目id进行比较。

很遗憾,这是不正确的。如果邮件项目还没有检查器,则调用
mailItem.GetInspector
将创建并显示一个新的检查器。资料来源:@hughteotl-太棒了!我更新了方法以反映这一点。这也给我们带来了问题,因为
GetInspector
正在创建
Inspector
,而不是检查它是否存在。按照@Dmitry和您的建议正确解决。