我有一个用于MS Project的VSTO加载项,用于打开表单,其中数据与表单打开时处于活动状态的特定项目文件相关。可以打开与一个项目文件相关的一个表单,同时打开另一个与第二个打开的项目文件相关的不同表单。
当我关闭项目文件时,我想检查每个打开的表单,如果表单基础项目ID等于正在关闭的项目文件的项目ID,则关闭它。如何访问vsto应用程序的开放表单集合(或执行等效的操作)? Application.OpenForms对象似乎不存在于vsto世界中。
答案 0 :(得分:1)
使用Dictionary对象存储表单实例以及文件名。每次创建表单时,将其添加到字典中,当项目关闭时,搜索字典以关闭相应的副本。
Friend ProjectForms As New Dictionary(Of String, MyForm)
Friend Sub ShowForm()
Dim f As New MyForm
Try
ProjectForms.Add(ProjApp.ActiveProject.Name, f)
Catch AlreadyInTheDictionary As Exception
' do nothing, it's already in the dictionary
End Try
f.Show()
End Sub
将此信息放入包含应用程序事件的模块中(通常为ThisAddIn)。
Private Sub Application_ProjectBeforeClose(pj As MSProject.Project, ByRef Cancel As Boolean) Handles Application.ProjectBeforeClose
ProjectForms(pj.Name).Close()
End Sub