VSTO Outlook 约会事件 (VB.NET)

Posted

技术标签:

【中文标题】VSTO Outlook 约会事件 (VB.NET)【英文标题】:VSTO Outlook Appointment Event (VB.NET) 【发布时间】:2020-07-23 19:23:02 【问题描述】:

使用 Outlook VSTO [VB.NET] VISUAL Studio 2019 时

Imports Microsoft.Office.Tools
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Outlook

Private WithEvents inspectors As Outlook.Inspectors
Private WithEvents myappt As Outlook.AppointmentItem
    
Private Sub ThisAddIn_Startup() Handles Me.Startup
     inspectors = Me.Application.Inspectors
End Sub
    
Private Sub inspectors_NewInspector(ByVal Inspector As Microsoft.Office.Interop.Outlook.Inspector) Handles inspectors.NewInspector
     If TypeOf Inspector.CurrentItem Is Outlook.AppointmentItem Or TypeOf Inspector.CurrentItem Is Outlook.MeetingItem Then
                myappt = Inspector.CurrentItem
     End If
End Sub

但以下事件均无效,实际上这一行 (myappt = Inspector.CurrentItem) 在打开新约会时会受到影响。

 Private Sub myappt_PropertyChange(ByVal Name As String)
        MsgBox(Name)
 End Sub
 Private Sub myappt_Close(Cancel As Boolean)
        MsgBox("Hi")
 End Sub

实际上,每当约会时间发生变化时,我都想捕获该事件并想执行一些操作。

我是否缺少一些属性更改的事件处理程序

【问题讨论】:

您遇到错误还是事件未触发?您是如何添加事件的? 得到答案缺少处理程序事件myappt = DirectCast(Inspector.CurrentItem, Outlook.AppointmentItem) AddHandler myappt.PropertyChange, AddressOf myappt_PropertyChange 【参考方案1】:

代码对 VBA 有效,但对 VB.NET 无效,因为在声明带有事件的对象时不会自动添加事件处理程序。例如,这里是 VBA 中的代码:

Public WithEvents myItem As Outlook.AppointmentItem 

Sub Initialize_handler() 
 Set myItem = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar).Items("Status Meeting") 
End Sub 
 
Private Sub myItem_PropertyChange(ByVal Name As String)
 Select Case Name 
 Case "ReminderSet" 
 MsgBox "You may not remove a reminder on this item."
 myItem.ReminderSet = True 
 Case Else 
 End Select 
End Sub

在 VB.Net 中,您需要使用 AddHandlerRemoveHandler 语句,它们允许您在程序执行期间随时启动和停止事件处理。 Handles 关键字和AddHandler 语句都允许您指定特定过程处理特定事件,但有区别。 AddHandler 语句在运行时将过程连接到事件。定义过程时使用Handles 关键字来指定它处理特定事件。如需更多信息,请参阅Handles。

AddHandler appt.PropertyChange, AddressOf myappt_PropertyChange

【讨论】:

以上是关于VSTO Outlook 约会事件 (VB.NET)的主要内容,如果未能解决你的问题,请参考以下文章

VSTO Outlook 从约会中检索 TimeZoneStruct

带有 FormRegion 的 VSTO Outlook 约会 - 删除收件人时保存异常

Outlook VSTO - 当我调用约会.Display() 时如何显示“邀请与会者”文本框?

Outlook 约会替换表单区域的功能区页面已禁用

来自 Sharepoint Web 部件的 Outlook 约会

VSTO ItemAdd事件未触发