如何在VSTO加载项中迭代打开的表单?

时间:2018-02-20 13:05:18

标签: vsto ms-project

我有一个用于MS Project的VSTO加载项,用于打开表单,其中数据与表单打开时处于活动状态的特定项目文件相关。可以打开与一个项目文件相关的一个表单,同时打开另一个与第二个打开的项目文件相关的不同表单。

当我关闭项目文件时,我想检查每个打开的表单,如果表单基础项目ID等于正在关闭的项目文件的项目ID,则关闭它。如何访问vsto应用程序的开放表单集合(或执行等效的操作)? Application.OpenForms对象似乎不存在于vsto世界中。

1 个答案:

答案 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