在VB.net 2010中,我需要什么代码才能将窗口置于屏幕前面。
我的目标是显示一种紧急警报类型,它是一个表单,由于某些原因我不使用消息框。
有人建议使用以下代码,但这并没有起作用:
Private Sub frmMessage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.BringToFront()
End Sub
在VB.net 2010中,我需要什么代码才能将窗口置于屏幕前面。
我的目标是显示一种紧急警报类型,它是一个表单,由于某些原因我不使用消息框。
有人建议使用以下代码,但这并没有起作用:
Private Sub frmMessage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.BringToFront()
End Sub
只需要设置窗口的TopMost
属性即可将其置于其他窗口之上。
Form.TopMost = True
尝试
me.Activate()
这个应该可以解决问题。
编辑:我谷歌搜索以找到我的答案的备份。
编辑2:
似乎有几件事情可以起作用,如上所述。
''depending on setup
Me.Show
Form2.Show()
同时
Form2.ShowDialog()
同样
Form2.Visible = True
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("user32.dll")> _
Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
string name = "Untitled - Notepad";
IntPtr ptr = FindWindow(null, name);
SetForegroundWindow(ptr);
如果你想把窗体带到前面来,可以在winform失去焦点或最小化后进行操作。我的情况是,在按钮上打开一个winform时有效。
frmProducts.Show()
'Retorre the original State
frmProducts.BringToFront()
frmProducts.WindowState = FormWindowState.Normal
尝试使用.Shown事件。这是一个三个表单测试的代码。在按钮点击事件结束时,Form3应该在Form2的上面,在Form1的上面。
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Me.SendToBack()
Dim f2 As New Form2
f2.Show()
Dim f3 As New Form3
f3.Show()
End Sub
End Class
Public Class Form2
Private Sub Form2_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
Me.BringToFront()
End Sub
End Class
Public Class Form3
Private Sub Form3_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
Me.BringToFront()
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.TopMost = True
End Sub
从哪里将窗口置于前台?
在具有多个表单的 MDI 中,form.BringToFront()
就足够了,这将在应用程序中将表单移动到顶部。您还可以在呈现警告/错误时使用 form.ShowDialog()
方法。
在您的桌面上可能有多个应用程序,最好将应用程序设置为始终在顶部。
如果您的应用程序在另一个窗口后面,则警告消息可能不可见。
要将 application
置于前台,您需要进行一些额外的工作,这些是“form”类的“扩展”,因此使用方法为:form.MakeTopMost()
:
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Function SetWindowPos(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
End Function
Private ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
<System.Runtime.CompilerServices.Extension()> _
Public Sub MakeTopMost(frm As Form)
SetWindowPos(frm.Handle(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
<System.Runtime.CompilerServices.Extension()> _
Public Sub MakeNormal(frm As Form)
SetWindowPos(frm.Handle(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
一如既往,扩展代码需要在单独的模块中。
Dim form As Form = new Form
form.TopMost = True
form.Owner = Me
form.ShowDialog()
form.Dispose()
If frmFISDash Is Nothing Then
frmFISDash = New frmFISDashboard
frmFISDash.Show()
Else
frmFISDash.WindowState = FormWindowState.Normal
frmFISDash.BringToFront()
End If
试试这个:
Me.ShowDialog()
应该有所帮助。