c# - Office 2010 monitoring calendar events -
hey have following code in vb.net translated c# found on internet monitoring outlook calendar events (add, modify , delete).
the code is:
public class thisaddin private sub thisaddin(sender object, e system.eventargs) handles me.startup dim monitor new calendarmonitor(me.application.activeexplorer()) addhandler monitor.appointmentadded, addressof monitor_appointmentadded addhandler monitor.appointmentmodified, addressof monitor_appointmentmodified addhandler monitor.appointmentdeleting, addressof monitor_appointmentdeleting end sub ...etc etc... end class
=======================
public class calendarmonitor private _explorer explorer private _folderpaths list(of string) private _calendarfolders list(of mapifolder) private _calendaritems list(of items) private _deleteditemsfolder mapifolder public event appointmentadded eventhandler(of eventargs(of appointmentitem)) public event appointmentmodified eventhandler(of eventargs(of appointmentitem)) public event appointmentdeleting eventhandler(of canceleventargs(of appointmentitem)) public sub new(anexplorer explorer) _folderpaths = new list(of string)() _calendarfolders = new list(of mapifolder)() _calendaritems = new list(of items)() _explorer = anexplorer _explorer.beforefolderswitch += new explorerevents_10_beforefolderswitcheventhandler(addressof explorer_beforefolderswitch) dim session [namespace] = _explorer.session try _deleteditemsfolder = session.getdefaultfolder(oldefaultfolders.olfolderdeleteditems) hookupdefaultcalendarevents(session) marshal.releasecomobject(session) session = nothing end try end sub private sub hookupdefaultcalendarevents(asession [namespace]) dim folder mapifolder = asession.getdefaultfolder(oldefaultfolders.olfoldercalendar) if folder isnot nothing try hookupcalendarevents(folder) marshal.releasecomobject(folder) folder = nothing end try end if end sub private sub explorer_beforefolderswitch(anewfolder object, byref cancel boolean) dim folder mapifolder = trycast(anewfolder, mapifolder) ' ' hookup events other calendar folder opened. ' if folder isnot nothing try if folder.defaultitemtype = olitemtype.olappointmentitem hookupcalendarevents(folder) end if marshal.releasecomobject(folder) folder = nothing end try end if end sub private sub hookupcalendarevents(acalendarfolder mapifolder) if acalendarfolder.defaultitemtype <> olitemtype.olappointmentitem throw new argumentexception("the mapifolder must use " + "appointmentitems default type.") end if if (_folderpaths.contains(acalendarfolder.folderpath) = false) andalso (isuserscalendar(acalendarfolder)) dim items items = acalendarfolder.items _folderpaths.add(acalendarfolder.folderpath) _calendarfolders.add(acalendarfolder) _calendaritems.add(items) items.beforeitemmove += new mapifolderevents_12_beforeitemmoveeventhandler(addressof calendar_beforeitemmove) items.itemchange += new itemsevents_itemchangeeventhandler(addressof calendaritems_itemchange) items.itemadd += new itemsevents_itemaddeventhandler(addressof calendaritems_itemadd) end if end sub private sub calendaritems_itemadd(anitem object) dim appointment appointmentitem = trycast(anitem, appointmentitem) if appointment isnot nothing try raiseevent appointmentadded(me, new eventargs(of appointmentitem)(appointment)) marshal.releasecomobject(appointment) appointment = nothing end try end if end sub private sub calendaritems_itemchange(anitem object) dim appointment appointmentitem = trycast(anitem, appointmentitem) if appointment isnot nothing try raiseevent appointmentmodified(me, new eventargs(of appointmentitem)(appointment)) marshal.releasecomobject(appointment) appointment = nothing end try end if end sub private sub calendar_beforeitemmove(anitem object, amovetofolder mapifolder, byref cancel boolean) if (amovetofolder nothing) orelse (isdeleteditemsfolder(amovetofolder)) dim appointment appointmentitem = trycast(anitem, appointmentitem) if appointment isnot nothing try 'if appointmentdeleting isnot nothing ' ' listeners appointmentdeleting event can cancel move operation if moving ' deleted items folder. ' dim args new canceleventargs(of appointmentitem)(appointment) raiseevent appointmentdeleting(me, args) cancel = args.cancel 'end if marshal.releasecomobject(appointment) appointment = nothing end try end if end if end sub private function isuserscalendar(afolder mapifolder) boolean ' ' based purely on observations far - better way? ' return (afolder.store isnot nothing) end function private function isdeleteditemsfolder(afolder mapifolder) boolean return (afolder.entryid = _deleteditemsfolder.entryid) end function end class
and hitting error on line has code:
_explorer.beforefolderswitch += new explorerevents_10_beforefolderswitcheventhandler(addressof explorer_beforefolderswitch)
the error is:
an exception of type 'system.missingmemberexception' occurred in microsoft.visualbasic.dll not handled in user code
additional information: public member 'beforefolderswitch' on type 'explorerclass' not found.
what need in order working in vb.net?
you need convert vb's event wireup format:
addhandler _explorer.beforefolderswitch, addressof explorer_beforefolderswitch
note explicit delegate construction unnecessary.
Comments
Post a Comment