VB.net 无边框窗体在任务栏上最大化

VB.net Borderless Form Maximize over Taskbar

当我最大化我的无边框窗体时,窗体覆盖了整个屏幕,包括任务栏,我不希望它这样做。我发现很难在网上找到解决我的问题的方法,我想出的只是下面的代码,它会短时间显示任务栏,但随后消失,表格仍然占据整个屏幕.

Private Sub TableLayoutPanel1_DoubleClick(sender As Object, e As MouseEventArgs) Handles TableLayoutPanel1.DoubleClick
    If e.Location.Y < 30 Then
        Me.WindowState = FormWindowState.Maximized
        Me.ControlBox = True
    End If
End Sub

我开始认为解决我的问题的唯一方法是找到屏幕尺寸高度减去任务栏高度以获得表单高度,但我希望可能有一个更简单的答案。

使用"working area"的画面:

    Me.Bounds = Screen.GetWorkingArea(Me)

使用窗体的 Load 事件设置其最大尺寸,如下所示:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.MaximumSize = Screen.FromRectangle(Me.Bounds).WorkingArea.Size
End Sub

现在最大化它会将大小限制为监视器的工作区域,即监视器大小减去任务栏。

你最好这样做:

Me.MaximumSize = Screen.FromControl(Me).WorkingArea.Size

因为有些用户使用多台显示器。因此,如果您使用 Hans Passant 的方式,当用户将应用程序最大化到辅助显示器时,应用程序将获得主显示器的工作区域大小并且看起来很糟糕!!!

我认为这是解决您问题的更好方法

  Private Sub main_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Me.WindowState = FormWindowState.Normal
        Me.StartPosition = FormStartPosition.Manual
        With Screen.PrimaryScreen.WorkingArea
            Me.SetBounds(.Left, .Top, .Width, .Height)
        End With
    End Sub