我需要在VB.net 2010中设置一个窗口来显示屏幕前面的代码。
我想要实现的是显示紧急警报类型,它是一种形式,由于某些原因我没有使用消息框。
有人建议使用以下代码,但这不起作用:
Private Sub frmMessage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.BringToFront()
End Sub
答案 0 :(得分:20)
设置窗口的属性 TopMost 就足够了。
Form.TopMost = True
答案 1 :(得分:11)
试
me.Activate()
这个outta做的伎俩
编辑:我用谷歌搜索我的答案备份
EDIT2:
似乎有一些有用的东西。以上以及
''depending on setup
Me.Show
Form2.Show()
也
Form2.ShowDialog()
也
Form2.Visible = True
答案 2 :(得分:6)
<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);
这会将窗口置于屏幕的正面。
答案 3 :(得分:3)
尝试使用 .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
答案 4 :(得分:1)
从哪里把窗户带到前面?
在具有多种表单的MDI中,form.BringToFront()
就足够了,这会将表单移到应用程序的顶部。
您还可以在显示警告/错误时使用form.ShowDialog()
方法。
在桌面上,您可能有多个应用程序,最好将应用程序设置为TopMost。
如果您的应用程序位于其他窗口后面,则警告消息可能不可见。
要将application
置于最前面,您需要更多额外的工作,这是“表单”类的“扩展”,因此使用方式为: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
与往常一样,扩展代码需要位于单独的模块中。
答案 5 :(得分:0)
试试这个:
Me.ShowDialog()
应该有帮助。
答案 6 :(得分:0)
如果你想要的东西是在winfom失去焦点或最小化后得到的。在我的情况下,当我在按钮上打开一个winform时工作。
frmProducts.Show()
'Retorre the original State
frmProducts.BringToFront()
frmProducts.WindowState = FormWindowState.Normal
答案 7 :(得分:0)
在表单加载时查看下面的示例
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.TopMost = True
End Sub
答案 8 :(得分:0)
以下似乎最容易提出一个名为&#34; Projects&#34;点击菜单选项后。如有必要,将加载表格,必要时将联合国最小化,并将其放在前面(&#39;焦点&#39;)。
Private Sub ProjectsToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ProjectsToolStripMenuItem1.Click
Me.Cursor = Cursors.WaitCursor ' if form is slow to load for any reason
Projects.Show()
Me.Cursor = Cursors.Default
Projects.WindowState = FormWindowState.Normal
Projects.Focus()
End Sub
答案 9 :(得分:0)
根据他的描述,采取吉姆诺兰所说的做法。这是最好的处理方式,以确保表单在所有其他表单的前面正确处理,以及处理表单,分配新表单的所有权以及显示表单
Dim form As Form = new Form
form.TopMost = True
form.Owner = Me
form.ShowDialog()
form.Dispose()
答案 10 :(得分:0)
我用这种方式解决了它(我对某人有用) - 这样即使在调试模式下它也会将隐藏的形式带到前面:
Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
If Me.WindowState = FormWindowState.Minimized Then
HideForm()
Else
BringFormToFront()
End If
End Sub
Private Sub NotifyIcon_Click(sender As Object, e As EventArgs) Handles NotifyIcon.Click
'Determine which mouse button was pressed, in order to differentiate between Left/Right Mouse Button
Dim MouseButton As System.Windows.Forms.MouseEventArgs = CType(e, MouseEventArgs)
If MouseButton.Button = MouseButtons.Left Then
BringFormToFront()
End If
End Sub
Private Sub NotifyIcon_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIcon.DoubleClick
BringFormToFront()
End Sub
Private Sub HideForm()
Me.NotifyIcon.Visible = True
Me.ShowInTaskbar = False
'Windowstate controlled by user when minimizing Form
Msgbox("Minimized, click on Notify Icon to show")
End Sub
Private Sub BringFormToFront()
Me.NotifyIcon.Visible = False
Me.ShowInTaskbar = True
Me.WindowState = FormWindowState.Normal
End Sub
答案 11 :(得分:0)
有点关闭OP ...我有一个“菜单”,我从菜单打开。用户可以切换到其他窗口,然后再次“加载”仪表板。如果它已经装好,它将被带到前面。
声明frmFISDash = frmFISDashboard“global”
If frmFISDash Is Nothing Then
frmFISDash = New frmFISDashboard
frmFISDash.Show()
Else
frmFISDash.WindowState = FormWindowState.Normal
frmFISDash.BringToFront()
End If
注意.WindowsState的设置 - 如果表单最小化.bringToFront不起作用。
答案 12 :(得分:0)
我知道这有点老了,但今天我遇到了类似的问题,这就是我解决它的方法。只要您不介意关闭开放表单并创建新表单,它就会起作用。
Dim MyRemoteForm As New Form
MyRemoteForm = Application.OpenForms("frmManualRemote")
If MyRemoteForm Is Nothing Then
frmManualRemote.Show()
Else
frmManualRemote.Close()
frmManualRemote.Show()
End If
答案 13 :(得分:0)
从屏幕上绘制一个可见的最顶层表格,然后将此表单作为ShowDialog()调用的所有者。
答案 14 :(得分:0)
正如另一位用户发布的那样,我最喜欢的方法之一是设置表单所有者。通过这样做,当表单被聚焦,激活等时,子表单将始终位于父表单的顶部...这样做的好处是您不必捕获任何特殊事件并执行任何特殊代码。假设您有一个主窗体frmMain和一个弹出窗口frmPopup,您可以使用以下代码来确保弹出窗口始终位于主窗体之上而不使用topmost(可以使用但可能会产生一些不良影响)。
frmPopup.show(frmMain)
或者您可以使用较长的版本(由某人
发布)frmPopup.Owner = frmMain
frmPopup.show()
另一件很棒的事情是你也可以将它与ShowDialog()
一起使用frmPopup.ShowDialog(frmMain)
我知道这是一个古老的帖子,但也许人们仍然在寻找简单的解决方案。它确实帮助改进了我的程序的功能,使用的代码比以前少了很多。
答案 15 :(得分:0)
只需设置要显示在顶部的表单的Owner
属性:
Dim frmMessage As New Form()
frmMessage.Owner = frmMain 'frmMain is the form creating the message window
frmMessage.Show()
现在frmMessage
始终位于frmMain
之上,无论重点如何。
答案 16 :(得分:0)
我用:
dim tempResult as dialogResult = frmName.showDialog()
并以被叫形式:
me.dialogResult = dialogResult.{OK, Abort, whatever}
调用表单代码在继续执行之前等待调用的表单结果。
答案 17 :(得分:0)
当无效时,请右键单击并选择“置于前面”。如果其他图像覆盖了必须位于前面的图像,只需右键单击每个图像,然后根据需要选择“发送到后面”。
答案 18 :(得分:0)
我的要求是弹出一个可能最小化的应用程序并使其最大化和活跃。在网上搜索了一下之后,我在c ++论坛中找到了部分答案。
WindowState = FormWindowState.Maximized
Me.Activate()
这使我的应用程序处于任何状态(maxxed,mini'd,大,小,后面的东西)。它将它带到了前面,并在屏幕上最大化。即把它弹出屏幕,这样我才能看到它!
答案 19 :(得分:-1)
一个小技巧:
me.hide()
me.visible = true