Xaw*_*aw4 5 .net c# events outlook-addin
我正在编写一个Outlook加载项,并希望在保存之后(何时)使用约会的数据执行某些操作(此处不相关).
(我是Outlook-Addins的新手)
所以我发现有一个AfterWrite事件,我可以注册一个方法.Application上有一个ItemLoad事件.
所以我的第一个Efford是这样的:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// ...
this.Application.ItemLoad +=
new Outlook.ApplicationEvents_11_ItemLoadEventHandler(atItemLoad);
}
public void atItemLoad(Object item)
{
Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem;
if (aitem != null)
{
aitem.AfterWrite +=
new Outlook.ItemEvents_10_AfterWriteEventHandler(afterWrite);
}
}
public void afterWrite()
{
// Who was written?
MessageBox.Show("it was written!");
}
Run Code Online (Sandbox Code Playgroud)
问题是,我不知道如何获取约会的数据,这引发了事件.
Application.ItemLoad注册一个获取Object的函数,该函数可以强制转换为约会.
AfterWrite没有.我想要这样的事情:
public void afterWrite(Outlook.AppointmentItem aitem)
{
// do something with the data from the Appointment
MessageBox.Show(aitem.Subject + " was written!");
}
Run Code Online (Sandbox Code Playgroud)
我担心我正在研究完全错误的方向..
*对不起,如果我的英语很乱 - 这不是我的母语
编辑:
我甚至试过这样的结构:
private List<AppointmentEventHolder> holderList = new List<AppointmentEventHolder>();
internal class AppointmentEventHolder
{
private Outlook.AppointmentItem aitem = null;
public AppointmentEventHolder(Outlook.AppointmentItem item)
{
aitem = item;
}
public void onWrite()
{
MessageBox.Show("write: " + aitem.Subject);
}
}
public void atItemLoad(Object item)
{
Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem;
if (aitem != null)
{
AppointmentEventHolder aHolder = new AppointmentEventHolder(aitem);
holderList.Add(aHolder);
aitem.AfterWrite += aHolder.onWrite;
}
}
Run Code Online (Sandbox Code Playgroud)
但事件不会被解雇!我现在非常沮丧
好吧,我想我得到了这个.
您必须在具有约会的文件夹上注册处理程序.
我阅读并体验了自己,保存对您注册事件的对象的引用至关重要,所以我这样做了.
这就是代码
private Outlook.MAPIFolder _CalendarFolder = null;
private Outlook.Items _CalendarItems = null;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Outlook.MAPIFolder calendarFolder =
this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
// get the Termine24-Folder (if not found, create it)
try
{
_CalendarFolder = calendarFolder.Folders[Constants.FOLDERNAME];
}
catch
{
_CalendarFolder = calendarFolder.Folders.Add(Constants.FOLDERNAME);
}
_CalendarItems = _CalendarFolder.Items;
attachEvents();
}
public void attachEvents()
{
_CalendarItems.ItemAdd += Item_Add;
_CalendarItems.ItemChange += Item_Change;
_CalendarItems.ItemRemove += Item_Remove;
}
public void Item_Add(Object item)
{
Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem;
if (aitem != null)
{
MessageBox.Show("add: " + aitem.Subject);
}
else
{
MessageBox.Show("add, but no appointment");
}
}
public void Item_Change(Object item)
{
Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem;
if (aitem != null)
{
MessageBox.Show("changed: " + aitem.Subject);
}
else
{
MessageBox.Show("change, but no appointment");
}
}
public void Item_Remove()
{
MessageBox.Show("Item_remove");
}
Run Code Online (Sandbox Code Playgroud)
好的方面是,如果约会在概述中被拖放,我现在也会得到一个事件.
但是Item_Remove仍然没有让我删除被删除的对象.
| 归档时间: |
|
| 查看次数: |
5680 次 |
| 最近记录: |