VSTO避免多次加载窗体

Posted doctor-cao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VSTO避免多次加载窗体相关的知识,希望对你有一定的参考价值。

使用VSTO编写Excel的加载项时,可动态地增加用户窗体,也可调用使用手工方法添加的Windows窗体。
Windows窗体其实是一个“类”,所以,调用手工添加的已经存在的Windows窗体时,使用这样的代码:

Dim frm_演示 as 手工窗体 ‘这个手工窗体是通过“项目-添加窗体(Windows窗体)",将新添加的窗体命名为”手工窗体“。

定义 frm_演示 变量时,要将放在“类内”、“过程外”,即“类的私有变量”。

然后判断是否实例化来确定是否需要 “frm_演示 = New 手工窗体”。

在程序运行过程中关闭窗体,会引发Disposal,此时,frm_演示 仍处于实例化状态,所以,"frm_演示 Is Nothing" 为“真”,但“frm_演示.Show()"时出错。

所以,要通过“Try”来处理。

为避免多次打开,可通过  Application.OpenForms.Count 来判断。当然,窗体数量超过1个时,要通过窗体名字等来判断。这里不赘述。

Imports Microsoft.Office.Tools.Ribbon

Public Class Excel加载项
  Dim frm_演示 As手工 窗体
  dim str_Msg as String‘用于查看错误代码.
  Private Sub 演示_Load(ByVal sender As System.Object, ByVal e As RibbonUIEventArgs) Handles MyBase.Load
    If frm_演示 Is Nothing Then
      frm_演示 = New 手工窗体
    Else
      Try
        frm_演示.Show()
      Catch ex As Exception
        str_Msg = String.Format("{0}ralsed exception :{1}", ex.Source, ex.Message)
        MsgBox(str_Msg)‘看一下错误代码是什么。
        frm_演示 = New 手工窗体
      End Try
    End If
    ‘通过判断打工的窗体数来决定是否要使用 “frm_演示.Show()"。
    If Application.OpenForms.Count = 0 Then
      frm_演示.Show()

    End If  

  End Sub

以上是关于VSTO避免多次加载窗体的主要内容,如果未能解决你的问题,请参考以下文章

在C#的winform中,如何快速加载窗体,避免控件的背景图片闪烁?

如何对无法加载的 VSTO 插件进行故障排除?

VSTO、Outlook 加载项和 Visual Studio 2015

以编程方式安装 VSTO 加载项

如何使用 VS 2012 创建 (VSTO) Office 2007 加载项?

将 Js 加载项添加到由 VSTO 加载项创建的自定义功能区选项卡