【问题标题】:VB.net Borderless Form Maximize over TaskbarVB.net 无边界表单最大化任务栏
【发布时间】:2015-01-30 17:24:40
【问题描述】:

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

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

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

【问题讨论】:

  • 我开始认为控制框与我正在尝试做的事情无关。只是假设它确实如此,因为当我将它放入我的代码中时任务栏会出现一秒钟。
  • 哦,我也试过代码来改变表单有边框,最大化然后再次无边框,但我的表单开始崩溃并停止响应。

标签: vb.net maximize taskbar maximize-window


【解决方案1】:

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

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

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

【讨论】:

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

使用屏幕的“工作区”:

    Me.Bounds = Screen.GetWorkingArea(Me)

【讨论】:

  • 也是一个很棒的答案,很有魅力。也谢谢。
【解决方案3】:

你最好这样做:

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

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

【讨论】:

    【解决方案4】:

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

      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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多