2015-12-21 103 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