Jarron
Jarron

Reputation: 1049

VB.net Borderless Form Maximize over Taskbar

When I maximize my borderless form, the form covers the entire screen including the taskbar, which I don't want it to do. I'm finding it very difficult to find a solution to my problem on the net, all I've come up with is the below code, which displays the taskbar for a short time, but then disappears and the form still takes up the entire screen.

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

I'm starting to think the only way to solve my problem is to find the screen size height minus the taskbar height to get the form height, but I'm hoping there might be a simpler answer.

Upvotes: 3

Views: 13242

Answers (4)

Sandun
Sandun

Reputation: 101

I think this is a better way to solve your problem

  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

Upvotes: 0

Simos Sigma
Simos Sigma

Reputation: 978

You should better do this:

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

Because some users use multiple monitors. So if you use Hans Passant's way, when user maximize application to secondary monitor, application will get primary's monitor working area size and will look awful!!!

Upvotes: 2

Hans Passant
Hans Passant

Reputation: 942438

Use the form's Load event to set its maximum size, like this:

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

Maximizing it now restricts the size to the monitor's working area, which is the monitor size minus the taskbars.

Upvotes: 4

Idle_Mind
Idle_Mind

Reputation: 39152

Use the "working area" of the screen:

    Me.Bounds = Screen.GetWorkingArea(Me)

Upvotes: 2

Related Questions