如何通过在VSTO外接开放的形式重复?(How to iterate through open fo

2019-09-30 19:09发布

我有一个VSTO加载项为MS项目打开,其中数据与处于活动状态时,形式是开放的具体项目文件的形式。 它可以打开相关的一个项目文件一种形式,同时具有相关的第二个开放项目文件中的另一个不同的形式开放。

当我收的工程文件,我想检查每一个开放的形式,如果形式基地项目ID等于被关闭项目文件的项目ID将其关闭。 如何访问VSTO应用程序的开放形式收集(或做一些等价物)? 该Application.OpenForms对象不会出现在VSTO世界存在。

Answer 1:

使用字典对象存储形式的实例与文件名一起。 每次创建表单时,将它添加到字典中,当项目关闭,搜索词典,关闭相应的副本。

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


文章来源: How to iterate through open forms in a VSTO add-in?