VB.NET 客户端大小

VB.NET ClientSize

我有一个表单,我希望它是全屏的,但任务栏应该仍然可见。我希望它有一个面板,其边框距离表单边框 10px

我试了上百种组合,就是做不到。

这是我的代码

Public Class Form1

Sub New()

    InitializeComponent()

    WindowState = FormWindowState.Maximized
    Size = New Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)

    Dim p1 As New Panel()
    p1.Location = New Point(10, 10)
    p1.Size = New Size(ClientSize.Width - 20, ClientSize.Height - 20)
    p1.BackColor = Color.Blue

    Controls.Add(p1)

End Sub

End Class

我想要的:http://i.imgur.com/4BxoBeh.png

我得到的是:http://i.imgur.com/QynIdaU.png

我会采取完全不同的方法,不需要计算任何东西:

WindowState = FormWindowState.Maximized
Size = New Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)
Padding = New Padding(10)

Dim p1 As New Panel()
p1.Location = New Point(0, 0)
p1.Dock = DockStyle.Fill
p1.BackColor = Color.Blue

Controls.Add(p1)

对于占据整个屏幕但未最大化的表单,您的计算是正确的,您可以通过在它出现时立即取消最大化来看到它。原因是您正在从构造函数中观察表单大小,这有点太早了(即,即使您在其他所有设置之前设置 WindowState = FormWindowState.MaximizedClientSize 仍然具有值 corresponding to non-maximized window because the window has not yet been created ) .如果您将原始代码移动到例如一个 Form.Load 处理程序,它将给出相反的结果 - 当表单最大化时看起来正确,否则不正确。

填充方法在所有情况下都按预期工作。