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、Outlook 加载项和 Visual Studio 2015