C# VSTO开发Outlook 2016时如何将窗体区域TextBox绑定到自定义属性
问题解答
1. 方法存在性说明
C# VSTO的Outlook互操作库提供了和VBA完全对应的SetControlItemProperty方法,隶属于Microsoft.Office.Interop.Outlook.FormRegion接口,功能和VBA版本一致,用于将窗体区域的控件直接绑定到Outlook项目的属性(包含自定义属性)。
2. 方法调用位置
必须在窗体区域的 FormRegionShowing 事件中调用,该事件触发时窗体区域的控件已完成初始化、且关联的Outlook项目对象已挂载,不会出现无效调用异常。禁止在窗体区域构造函数、FormRegionInitializing事件中调用,这两个阶段控件或Outlook项目还未完成初始化,会触发异常。
3. 具体使用示例
方法签名:void SetControlItemProperty(object Control, string PropertyName)
- 第一个参数:要绑定的控件实例,也就是你在窗体设计器中添加的TextBox控件对象
- 第二个参数:要绑定的属性名称,如果是用
UserProperties创建的自定义属性直接传属性名即可,如果是MAPI命名空间属性则传完整的属性标识字符串
using Outlook = Microsoft.Office.Interop.Outlook; // 窗体区域的FormRegionShowing事件处理方法 private void YourFormRegion_FormRegionShowing(object sender, EventArgs e) { // 先获取当前窗体关联的Outlook项目,这里以邮件项目为例,约会、任务等类型同理转换 Outlook.MailItem currentItem = this.OutlookItem as Outlook.MailItem; if (currentItem == null) return; // 自定义属性名称 const string CustomPropName = "MyCustomTextField"; // 可选:如果属性不存在则先创建,避免绑定失败 Outlook.UserProperty customProp = currentItem.UserProperties.Find(CustomPropName); if (customProp == null) { // 第三个参数设为true表示将属性同步到文件夹视图中,可根据需求调整 customProp = currentItem.UserProperties.Add(CustomPropName, Outlook.OlUserPropertyType.olText, true); } // 绑定TextBox控件到自定义属性 this.SetControlItemProperty(this.yourTextBoxControl, CustomPropName); }
4. 额外说明
- 绑定完成后无需手动处理值同步:Outlook会自动将控件的输入内容同步到绑定的自定义属性,加载项目时也会自动将属性值回显到控件中
- 如果需要解除绑定,调用同接口下的
ClearControlItemProperty(Control, PropertyName)方法即可
内容的提问来源于stack exchange,提问作者habalulu
相关产品推荐
相关产品推荐

