我有一个始终显示的第一个表格:
现在我希望在第一张表格的顶部显示第二张表格,但是直到这一刻我还没有成功,换句话说,第二张表格没有显示在顶部。那我怎么做呢?欢迎所有建议。
以下是我制作第一张表格的方法:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each s As Screen In Screen.AllScreens
Dim Locker As New Form2(s, 0.3)
Locker.Show()
Next
End Sub
End Class
============================================ =============================
Public Class Form2
Public Sub New(ByVal scrn As Screen, ByVal FrmOpacity As Double)
InitializeComponent()
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Me.StartPosition = FormStartPosition.Manual
Me.Bounds = scrn.Bounds
Me.TopMost = True
Me.Opacity = FrmOpacity
Me.ShowInTaskbar = False
Me.BackgroundImageLayout = ImageLayout.None
CaptureScreen(scrn)
End Sub
Private Sub CaptureScreen(ByVal s As Screen)
Using ScreenImg As New Bitmap(s.Bounds.Width, s.Bounds.Height)
Using g As Graphics = Graphics.FromImage(ScreenImg)
g.CopyFromScreen(s.Bounds.Location, Point.Empty, ScreenImg.Size, CopyPixelOperation.SourceCopy)
End Using
Me.BackgroundImage = New Bitmap(ScreenImg)
End Using
End Sub
End Class
答案 0 :(得分:1)
您只需将form2的Owner设置为form1
即可Public Class Form1
.....
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each s As Screen In Screen.AllScreens
Dim Locker As New Form2(s, 0.3)
Locker.Show(Me)
Next
End Sub
.....
End Class
将Form1的实例传递给Form2的Show方法会将Form1的传递实例设置为您在循环中创建的所有Owner
表单的Locker
。这样,Form2实例将始终位于Form1实例之上。当然,您可以删除TopMost=True
属性的设置,该属性一次只能分配给一个表单(只有一个表单可能是TopMost)
来自所有者表单属性上的MSDN
当表单由另一个表单拥有时,它将被关闭或隐藏 业主表格。例如,考虑一个名为Form2的表单 一个名为Form1的表单。如果Form1关闭或最小化,Form2也是 关闭或隐藏。所拥有的表格也永远不会显示在他们的背后 业主表格。您可以使用窗口的自有窗体,例如find和 替换窗口,当所有者表单是时,窗口不应该消失 选择。要确定父表单拥有的表单,请使用 OwnedForms属性。
答案 1 :(得分:0)
你想要的是模态对话。我不知道vb.Net,但如果你说
,请使用C#.NetNameOfFormThatShouldBeOnTop.Show();
表单只会显示但不一定在顶部。但是,如果你去
NameOfFormThatShouldBeOnTop.ShowDialog();
它将被强制排在最前面。从documentation开始,看起来在vb中执行此操作非常相似。我猜它会像
NameOfFormThatShouldBeOnTop.ShowDialog()
如果我的语法错误,请随时编辑:)
答案 2 :(得分:0)
您可以尝试在LOAD或SHOWN事件之后加载Sub,其中包含以下代码:
private sub LeaveMeAtTop()
Me.Topmost = True
Me.TopLevel = true
Me.Activate()
Me.ResizeRedraw() = true
Me.ResumeLayout()
Me.Focus()
end sub
它会强制表单显示在所有
的顶部