VSTO避免多次加载窗体

2021-03-02 03:25

阅读:651

标签:als   cep   一个   windows   end   演示   string   send   load   

使用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避免多次加载窗体

标签:als   cep   一个   windows   end   演示   string   send   load   

原文地址:https://www.cnblogs.com/doctor-cao/p/13070155.html


评论


亲,登录后才可以留言!