代码之家  ›  专栏  ›  技术社区  ›  Eric Christoph

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

  •  1
  • Eric Christoph  · 技术社区  · 6 年前

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rachel Hettinger    6 年前

    使用 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