C# VSTO如何正确实现Outlook Inspectors包装类 报错问题咨询
问题1:inspectors变量未找到报错
两个直接原因:
- 仅声明了
inspectors字段,没有做初始化赋值,VSTO场景下需要从Outlook应用实例获取Inspectors集合 - 事件绑定代码不能直接写在类的成员定义区域,必须放在构造函数、初始化方法这类可执行代码块中
修正后的Connect类核心结构示例:
using Outlook = Microsoft.Office.Interop.Outlook; public class Connect { private Outlook.Inspectors inspectors; // 集合必须先初始化,避免后续操作报空引用 private List<OutlookInspector> inspectorWindows = new List<OutlookInspector>(); // 初始化逻辑放在构造函数中 public Connect() { // 从VSTO全局应用对象获取Inspectors集合完成赋值 inspectors = Globals.ThisAddIn.Application.Inspectors; inspectors.NewInspector += inspectors_NewInspector; } void inspectors_NewInspector(Outlook.Inspector Inspector) { OutlookInspector existingWindow = FindOutlookInspector(Inspector); if ( existingWindow == null ) { AddInspector(Inspector); } } private OutlookInspector FindOutlookInspector(object window) { foreach ( OutlookInspector inspector in inspectorWindows ) { if ( inspector.Window == window ) { return inspector; } } return null; } private void AddInspector(Outlook.Inspector inspector) { inspectorWindows.Add(new OutlookInspector(inspector)); } }
问题2:Window变量未找到报错
原因是你自定义的OutlookInspector包装类没有定义公共的Window属性用于存储和暴露关联的Inspector实例,需要补充该类的属性定义:
using Outlook = Microsoft.Office.Interop.Outlook; public class OutlookInspector { // 定义公共Window属性用于对比匹配 public Outlook.Inspector Window { get; private set; } public OutlookInspector(Outlook.Inspector inspector) { Window = inspector; // 此处可添加你需要跟踪的Inspector、邮件项级别的事件绑定逻辑 } }
额外注意事项
- 你需要在
ThisAddIn_Startup方法中初始化Connect类的实例,整个监听逻辑才会生效:
private void ThisAddIn_Startup(object sender, System.EventArgs e) { var inspectorTracker = new Connect(); }
- 确保项目已正确引用Microsoft.Office.Interop.Outlook程序集,代码顶部已添加对应的Outlook别名引用。
内容的提问来源于stack exchange,提问作者habalulu
相关产品推荐
相关产品推荐

