Excel VSTO实现Excel子窗体模式。实现VBA子窗体效果
本帖最后由 1059526347 于 2020-12-14 14:06 编辑
在VSTO开发中时常使用 winfrom窗体用于用户互交,为了避免点击单元格时导致窗体被excel覆盖,最简单的方式就是设置 form.TopMost 属性,使窗体置于最上层。但是这种方式不但会置于excel的上层,同时也会覆盖其他应用的窗体,体验略差。
在vba中使用窗体,是以excel的子窗体模式显示的(子窗体仅在excel的上层,不会覆盖其他应用,并且子窗体会随着excel最小化而隐藏)
早期我在E速中实现了这种效果。
下面截取E速中实现的代码片段
1.实现 IWin32Window 接口
''' <summary>
''' 父窗口为Excel
''' </summary>
Class ParentForm
Implements IWin32Window
Sub New(Handle As Integer)
Me.Handle = New IntPtr(Handle)
End Sub
Public ReadOnly Property Handle As IntPtr Implements IWin32Window.Handle
End Class
2. 添加Form拓展函数
''' <summary>
''' 以Excel形式子窗体显示
''' </summary>
<Extension>
Public Sub ExShow(form As Form)
form.Show(New ParentForm(Ex.Hwnd))
End Sub
3.以子窗体模式显示
Private Sub Button55_Click(sender As Object, e As RibbonControlEventArgs) Handles Button55.Click
Dim A As New 关于
A.ExShow()
End Sub
引用原文:http://yshblog.com/blog/129