- 参考链接:
- 一般vsto打开窗体用show方法,往往会碰到窗体置顶的问题,以下两个方法都存在弊端
- winform有个置顶属性TopMost,当把TopMost属性设为true时,窗体置顶可以实现,但是效果是全局置顶,会呈现在所有的应用程序之上
- 用showDialog方法打开窗体,不过该方法在打开窗体的时候无法操作Excel表格,还有就是如果你在打开窗体的代码之后还有代码要执行的话,可能无法达到效果
- 所以最好的办法就是在窗体show的时候给他指定一个所有者,让其在所有者内部置顶
- 首先我们新建一个类,该类继承IWin32Window接口,代码如下:
-
Imports SystemImports System.Windows.Forms
Public Class formTopImplements IWin32Window
'IWin32Window接口类,为了实现弹出的窗体在Excel内
Private m_Handle As IntPtr
Public Sub New(ByVal handle As IntPtr)MyBase.New()Me.m_Handle = handleEnd Sub
Public Sub New(ByVal handle As Integer)MyBase.New()Me.m_Handle = New IntPtr(handle)End Sub
Public ReadOnly Property Handle As IntPtr Implements IWin32Window.HandleGetReturn Me.m_HandleEnd GetEnd Property
Public Sub Show(ByVal f As Form)If Not f.Visible Thenf.Show(Me)End IfEnd Sub
Public Function ShowDialog(ByVal f As Form) As DialogResultReturn f.ShowDialog(Me)End FunctionEnd Class 然后窗体show的时候传入当前的excel文档的窗柄
-
Dim formtop As New formTop(Globals.ThisAddIn.Application.Hwnd)formtop.Show(loginform)