VB.net 无边框窗体如何最大化而不被任务栏遮挡

3
当我最大化无边框窗体时,窗体会覆盖整个屏幕,包括任务栏,这不是我想要的。我在网上找到解决方案很困难,我只能找到以下代码,在短时间内显示任务栏,但之后就会消失,而窗体仍然占据整个屏幕。
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

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


我开始觉得控制框与我所尝试做的事情无关。只是因为当我将其放入我的代码中时,任务栏会出现一秒钟,所以我认为它有用。 - Jarron
哦,我也尝试了一些代码,去改变窗体的边框,最大化后再次变成无边框,但是我的窗体开始崩溃并停止响应。 - Jarron
4个回答

4
使用表单的Load事件来设置其最大大小,如下所示:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.MaximumSize = Screen.FromRectangle(Me.Bounds).WorkingArea.Size
End Sub

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


太棒了,我很高兴我的问题有一个简单的解决方案。非常感谢,我在网上搜索了几个小时,找不到这个答案。 - Jarron

2

使用屏幕的"工作区":

    Me.Bounds = Screen.GetWorkingArea(Me)

还是一个很棒的答案,非常有效。也谢谢你。 - Jarron

2
您最好这样做:

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

由于一些用户使用多个显示器。因此,如果您使用Hans Passant的方法,在用户将应用程序最大化到副显示器时,应用程序将获得主显示器的工作区大小,并且会显得很糟糕!


0

我认为这是解决你的问题的更好方式

  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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接