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

(0)

相关推荐