2015-12-21 79 views
1

我有一个应用程序在后台运行,并且命令向用户显示windows应用程序。如何在vb.NET中带前窗口

我的问题是,我不能让窗口放在前面,并在所有其他窗口的顶部

我用(浏览器(通常),其他应用程序等)TopMost=TrueBringToFront()Form.Activate()Form.ShowDialog()等,它仍然不适合我。

我设法让它在所有其他应用程序的前面,但只在第一个窗口。 EX: 我在后台运行应用程序,第一个窗口显示在所有其他窗口的顶部(基本显示在顶部的窗口只在重置后) 用户完成此窗口并关闭它。过了一会儿,第二个窗口应该显示在所有窗口之上,但不在所有窗口的顶部。

我还能试试吗? 你有什么可以“阻止”我的应用程序的想法,所以它不在顶部?

 Public Function ChooseDir() As String   
     Dim sRes As String = "" 

     Using folders As frmFolderBrowser = New frmFolderBrowser() 
      folders.ShowDialog() 
      sRes = folders.StrPathValue 
     End Using 
     ChooseDir = sRes 

     End Function 



    Private Sub frmFolderBrowser_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load   
    If DialogResult.OK = FolderBrowserDialog.ShowDialog() Then 
     strPath = FolderBrowserDialog.SelectedPath 
    End If 
    Me.Close() 

End Sub 
+0

你可以提供你的代码?这将很容易理解。 – Yog

+0

我添加了代码@Yog – Guid2015

+0

您发布的代码不包含任何代码来显示文件夹浏览器以外的窗体。那是你想要带到前面的窗户吗? –

回答

0

这应该为你工作:

MakeTopMostWindow(Me.Handle.ToInt64, True) 
Application.DoEvents() 
MakeTopMostWindow(Me.Handle.ToInt64, False) 

哪里,这是其他地方定义

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer 

Friend Sub MakeTopMostWindow(ByVal hwnd As Int64, ByVal MakeTopMostFlag As Boolean) 

    Dim HWND_TOPMOST As Integer 
    If MakeTopMostFlag Then 
     HWND_TOPMOST = -1 
    Else 
     HWND_TOPMOST = -2 
    End If 

    Dim SWP_NOMOVE As Integer = &H2 
    Dim SWP_NOSIZE As Integer = &H1 
    Dim TOPMOST_FLAGS As Integer = SWP_NOMOVE Or SWP_NOSIZE 
    Try 
     SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS) 
    Catch ex As Exception 
    End Try 

End Sub