【发布时间】:2018-11-07 23:59:02
【问题描述】:
我正在尝试创建 Outlook 2013 插件,但在访问 AppointmentItem 的属性时遇到了一些问题。之后你会找到一个缩短的示例代码:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.ItemLoad += new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}
void Application_ItemLoad(object Item)
{
if (Item is Outlook.AppointmentItem)
{
try
{
appointmentItem = Item as Outlook.AppointmentItem;
string sub = appointmentItem.Subject; // <--------
...
问题在于,我无法访问 appintment 的属性,因为内存中的数据尚不可用:
MSDN: ApplicationEvents_11_Event.ItemLoad event: 此事件在 Outlook 项目开始加载到内存时发生。除了 Outlook 项目的 Class 和 MessageClass 属性的值之外,该项目的数据尚不可用,因此在调用 Item 中返回的 Outlook 项目的 Class 或 MessageClass 以外的任何属性时会发生错误。同样,如果您尝试从 Outlook 项目调用任何方法,或者如果您在 Item 中返回的 Outlook 项目上调用 Application 对象的 GetObjectReference 方法,则会发生错误。
我的插件背后的目的是,在功能区栏中显示一个下拉框,其中显示的项目取决于约会的主题(和一些其他属性)的值。 那么有没有办法在事件处理程序期间访问约会的属性?或者是否有任何其他事件处理程序可以在 Appointment 加载时更改 DropDownBox?
谢谢和问候 安迪
【问题讨论】:
-
只是一个疯狂的猜测:尝试挂钩
AppointmentItem.ReadComplete事件 msdn.microsoft.com/en-us/library/office/jj229473.aspx 并且属性应该在那里 -
我试过了,你的想法,但我如何获得当前的约会?
The statement this.Application.ActiveInspector().CurrentItem as Outlook.AppointmentItem;不起作用。 -
如果您更改示例并为您的
appointmentItem = Item as Outlook.AppointmentItem;注册ReadComplete事件,它不起作用
标签: c# outlook outlook-addin