簡體   English   中英

將焦點設置為新的彈出窗口

[英]Set focus to new popup winform

我有一個在系統托盤中運行的應用程序,當用戶按下按鈕時,它會顯示一個要填寫的 WinForm 並發送電子郵件。 一切都很好,但顯示 WinForm 時的部分。 它顯示在頂部,焦點似乎在文本框上,但該窗口未處於活動狀態。

用於調用 Popup 窗體的代碼。

My.Forms.frmpopup.ShowDialog()

彈出窗體上的代碼

Private Sub frmPopup_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    Activate()
    BringToFront()
End Sub

Private Sub frmPopup_Load(sender As Object, e As EventArgs) Handles Me.Load
    TextBoxName.Focus()
End Sub

真正令人振奮的是,只要用戶當前不專注於 Internet Explorer 窗口,它就可以工作。 如果我找到解決方案,我會發布它。


似乎將兩個 Sub 合並為一個 Sub 可以解決問題,我將繼續測試。

Private Sub frmPopup_Shown(sender As Object, e As EventArgs) 處理 Me.Shown Activate() BringToFront() TextBoxName.Focus() End Sub

確保您的應用程序也具有焦點......

包括以下導入...

<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Long
End Function

在調用彈出窗口之前,或者在彈出的LOAD事件中,調用

SetForegroundWindow(Me.Handle)

SendToTop(true)應該將窗口帶到TopMost。

Private Const SWP_NOSIZE As Integer = &H1
Private Const SWP_NOMOVE As Integer = &H2

Private Shared ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private Shared ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean

Public Sub SendToTop(toTop As Boolean)
    If toTop Then
        SetWindowPos(Me.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
    Else
        SetWindowPos(Me.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
    End If
End Sub

只需使用Active(); 在彈出加載事件上

在我的用例*中,以下顯示了所需的結果:

popup.Show();
popup.Activate();

其中popup: Form 不知道為什么必須在Show()方法之后調用Activate() ,但事實證明它可以正常工作。


用例

我的用例顯示彈出窗口和加載程序表單。 彈出窗口和加載器都是頂級表單, ShowDialog()方法觸發。 它們在單獨的線程中執行,其想法是在彈出窗體獲取其數據時顯示加載程序窗體。 一旦完成長操作(即獲取),加載程序窗體關閉並顯示彈出窗體。

一切都按描述進行,除了加載程序關閉后彈出窗口沒有聚焦。

給定的兩行代碼正在解決我的問題,現在一切都按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM