我按照此处的 Microsoft 大师 Andrew Whitechapel 的指示为 Microsoft Access 创建了 VSTO 插件,并且运行良好。但是插件有一个 CustomTaskPane,当 Access 关闭时我遇到了问题。
如果在 Access 关闭时 CustomTaskPane 打开,则插件应保存 CustomTaskPane 控件的属性。如果将此代码放在 中ThisAddIn_Shutdown()
,我会收到以下错误:
System.ObjectDisposedException: Cannot access a disposed object.
at Microsoft.Office.Tools.CustomTaskPane.get_Control()
at MyAddin.ThisAddIn.ThisAddIn_Shutdown(Object sender, EventArgs e) in C:\...\ThisAddIn.vb:line nn
我不确定这是 CustomTaskPanes 或 Windows 窗体控件的正常操作,还是因为 VSTO 不是为 Access 设计的。我想知道是否会发生这种情况,因为 Access 没有应用程序级别的事件,例如 Access.Application."OnClose",其他 VSTO 批准的应用程序(例如 Excel 和 Word)也是如此。
经过一些实验后,我找到了一种解决方法,即使用HandleDestroyed
控件的事件,该事件发生在 之前Dispose()
,因此控件属性仍然可用。这有效:
Private Sub TextBox1_HandleDestroyed(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles TextBox1.HandleDestroyed
MsgBox(TextBox1.Text)
End Sub
有没有更好的办法..?变通办法让我很紧张。