如何将 Formregion 上的 TextBox 绑定到自定义 属性?

How to bind a TextBox on a Formregion to a custom property?

C#、VSTO、Outlook 2016

我创建了一个带有文本框的 Outlook Formregion。
我想将 TextBox 控件绑定到自定义 属性.

我找到了 SetControlItemProperty 方法:
https://docs.microsoft.com/en-us/office/vba/api/outlook.formregion.setcontrolitemproperty

c#中有没有类似的方法,如何使用这个方法
应该在哪里调用这个方法?

如果是托管加载项,您需要以编程方式设置 属性。对于 VSTO 加载项,没有自动绑定。

您可以在运行时使用任何标准的 Outlook 机制(例如 UserPropertiesCustomProperties 读取 属性 值,并设置您的控件的 Text 属性以编程方式。

好的,谢谢尤金。

所以以下是不可能的:

using Outlook = Microsoft.Office.Interop.Outlook;
using MSForms = Microsoft.Vbe.Interop.Forms;

namespace myHumbleAddin
{
  partial class frmDataTable
  {
    private void frmDataTable_FormRegionShowing(object s, EventArgs e) {
      Outlook.FormRegion mRegion = this.OutlookFormRegion;
      mRegion.SetControlItemProperty(mRegion.Form.mTextBox, "userField");
    }
  }
}

但是智能感知功能显示了 SetControlItemProperty 方法。
没有机会用这个吗?

Intellisense

Würg,谢谢尤金。 如果微'!%-&%"? ...

目前我的解决方案(仅针对约会):

using Outlook = Microsoft.Office.Interop.Outlook;

namespace myHumbleAddin
{
  partial class frmDataTable
  {
    private void frmDataTable_FormRegionShowing(object sender, System.EventArgs e) {
      Outlook.FormRegion currentRegion = this.OutlookFormRegion;
      Outlook.AppointmentItem currentItem = OutlookItem as Outlook.AppointmentItem;

      // Bind a control on the form to a UserPropertyField
      void bindControl (System.Windows.Forms.Control control, string customProperty) {

        string _value = currentItem.UserProperties[customProperty].Value.ToString();

        if (!string.IsNullOrEmpty(_value)) {
          control.Text = _value;
        }
      }

      if ( (currentItem != null) && (currentItem is Outlook.AppointmentItem) ) { 
        bindControl(tbBez, "Bezeichnung");
      }
    }

    private void frmDataTable_FormRegionClosed(object sender, System.EventArgs e) {
      Outlook.AppointmentItem currentItem = OutlookItem as Outlook.AppointmentItem;
      
      void setControlContents(System.Windows.Forms.Control control, string customProperty) {

        string _value = currentItem.UserProperties[customProperty].Value.ToString();

        if (control.Text.Length != 0 && control.Text != _value) {
          currentItem.UserProperties[customProperty].Value = control.Text;
        }
      }

      setControlContents(tbBez, "Bezeichnung");
    }
  }
}

感谢任何改进,因为我是这个 Outlook 世界的初学者。