如何循环访问 VSTO 加载项中的打开窗体?
How to iterate through open forms in a VSTO add-in?
我有一个用于 MS Project 的 VSTO 加载项,它可以打开表单,其中数据与打开表单时处于活动状态的特定项目文件相关。可以打开与一个项目文件相关的一种表格,同时打开与第二个打开的项目文件相关的另一种不同表格。
当我关闭项目文件时,我想检查每个打开的表单,如果表单基础项目 ID 等于正在关闭的项目文件的项目 ID,则将其关闭。如何访问 vsto 应用程序的开放表单集合(或做一些等效的事情)? Application.OpenForms 对象似乎不存在于 vsto 世界中。
使用 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
我有一个用于 MS Project 的 VSTO 加载项,它可以打开表单,其中数据与打开表单时处于活动状态的特定项目文件相关。可以打开与一个项目文件相关的一种表格,同时打开与第二个打开的项目文件相关的另一种不同表格。
当我关闭项目文件时,我想检查每个打开的表单,如果表单基础项目 ID 等于正在关闭的项目文件的项目 ID,则将其关闭。如何访问 vsto 应用程序的开放表单集合(或做一些等效的事情)? Application.OpenForms 对象似乎不存在于 vsto 世界中。
使用 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