C# Outlook 2013加载项-约会打开事件处理程序-无法访问属性
我正在尝试创建Outlook 2013 AddIn,访问AppointmentItem的属性时遇到一些问题。之后,您会发现一个简短的示例代码:C# Outlook 2013加载项-约会打开事件处理程序-无法访问属性,c#,outlook,outlook-addin,C#,Outlook,Outlook Addin,我正在尝试创建Outlook 2013 AddIn,访问AppointmentItem的属性时遇到一些问题。之后,您会发现一个简短的示例代码: private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.ItemLoad += new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application
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; // <--------
...
问题是,我无法访问应用程序的属性,因为数据尚未用于内存:
:
Outlook项目开始加载到内存时发生此事件。除Outlook项目的Class和MessageClass属性的值外,该项目的数据尚不可用,因此在为项目中返回的Outlook项目调用Class或MessageClass以外的任何属性时出错。类似地,如果尝试从Outlook项目调用任何方法,或者在项目中返回的Outlook项目上调用应用程序对象的GetObjectReference方法,则会发生错误
“我的加载项”的目的是在功能区栏中显示下拉框,其中显示的项目取决于主题的值和约会的某些其他属性。
那么,在eventhandler期间是否有方法访问约会的属性?或者有没有ohter eventhandler,我可以在约会加载时更改下拉框
谢谢和问候
Andi有一个类似的问题,我发现在注册AppointmentItem.ReadComplete处理程序时仍然无法访问属性 不过,我确实在AppointItem方面取得了一些成功。在处理程序的方法中,我能够访问属性 我的代码如下所示:
private Outlook.AppointmentItem _item;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.ItemLoad +=
new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}
private void Application_ItemLoad(object item)
{
if (item is Outlook.AppointmentItem)
{
this._item = item as Outlook.AppointmentItem;
this._item.Read += _item_Read;
}
}
private void _item_read()
{
// Example access of Recipients property
var recipients = this._item.Recipients;
}
有一个类似的问题,我发现在注册AppointItem.ReadComplete处理程序时仍然无法访问属性 不过,我确实在AppointItem方面取得了一些成功。在处理程序的方法中,我能够访问属性 我的代码如下所示:
private Outlook.AppointmentItem _item;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.ItemLoad +=
new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}
private void Application_ItemLoad(object item)
{
if (item is Outlook.AppointmentItem)
{
this._item = item as Outlook.AppointmentItem;
this._item.Read += _item_Read;
}
}
private void _item_read()
{
// Example access of Recipients property
var recipients = this._item.Recipients;
}
只是一个猜测:尝试挂钩AppointItem.ReadComplete事件,属性应该在那里我尝试过,你的想法是,但是我如何获得当前约会?语句this.Application.ActiveInspector.CurrentItem作为Outlook.AppointmentItem;不起作用。如果更改示例并将AppointItem=Item的ReadComplete事件重新注册为Outlook.appointmentItem;只是一个猜测:尝试挂钩AppointItem.ReadComplete事件,属性应该在那里我尝试过,你的想法是,但是我如何获得当前约会?语句this.Application.ActiveInspector.CurrentItem作为Outlook.AppointmentItem;不起作用。如果更改示例并将AppointItem=Item的ReadComplete事件重新注册为Outlook.appointmentItem;