如何在其他表格之上展示表格?

时间:2015-08-09 20:31:10

标签: vb.net winforms

我有一个始终显示的第一个表格:

  1. 最大化并作为内容显示屏幕
  2. 始终在最前面
  3. 无国界
  4. 现在我希望在第一张表格的顶部显示第二张表格,但是直到这一刻我还没有成功,换句话说,第二张表格没有显示在顶部。那我怎么做呢?欢迎所有建议。

    以下是我制作第一张表格的方法:

    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
    

3 个答案:

答案 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#.Net
NameOfFormThatShouldBeOnTop.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

它会强制表单显示在所有

的顶部