Я создал надстройку VSTO для Microsoft Access, следуя указаниям гуру Microsoft Эндрю Уайтчепела здесь , и он прекрасно работает. Но у надстройки есть CustomTaskPane, и у меня возникает проблема с ним, когда закрывается Access.
Если CustomTaskPane открывается при закрытии Access, надстройка должна сохранять свойства элементов управления 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 Forms, или это потому, что VSTO не предназначен для доступа. Мне интересно, происходит ли это, потому что 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
Есть ли лучший способ ..? Обходные пути заставляют меня нервничать.