【发布时间】:2017-04-11 11:51:55
【问题描述】:
我在 MS Windows 10 上的 MS VS2017 中有一个 VB.NET WinForm 程序,它的宽度受到限制,但它的高度应该与任何普通 Windows 应用程序相同。我有多个不同尺寸的显示器,这似乎与应用程序确定桌面高度的方式有关系。我应该注意,我的任务栏设置为不在第二个屏幕上展开,但只出现在主屏幕上(但这似乎不会影响其他 Windows 应用程序的行为)。
我在Move 事件处理程序中使用以下代码(我也尝试覆盖WndProc,但没有运气),但表单在主屏幕上的任务栏后面最大化,即它占据了全屏高度,它应该占据全屏高度减去任务栏高度。但是,它确实会在辅助屏幕上最大化到正确的高度。
Private Sub form1_Move(sender As Object, e As EventArgs) _
Handles MyBase.Move
Me.MaximumSize = New Size(Me.MaximumSize.Width, _ 'fixed width
My.Computer.Screen.Bounds.Height) 'screen height
End Sub
今天我尝试将行更改为:
Me.MaximumSize = New Size(Me.MaximumSize.Width, _ 'fixed width
My.Computer.Screen.FromControl(Me).WorkingArea.Height) 'screen height
但这现在会导致更复杂但仍然不正确的行为! (在辅助屏幕上不是全高)。我也尝试过使用SystemInformation.VirtualScreen.Height,但还是没有运气
获得正确高度的正确方法是什么?
这是描述的两个问题的图像,左侧是主显示器,表格最大化,高度将其一部分放置在任务栏后面,右侧是辅助显示器,最大高度没有高到足以填满没有任务栏的屏幕。如上所述,当在主监视器上最大化时,一些代码最终也导致表单甚至不符合任务栏。基本上我只是希望它像任何其他应用程序一样最大化,在任一监视器上正确地,有或没有任务栏,但宽度有限。
【问题讨论】:
-
不要那样做,不好用,更多技术挑战。而是制作一个适当的多显示器应用程序,一个表格显示在 1 个屏幕上,另一个表格显示在屏幕 2 上。然后用户可以决定是否要分屏(WIN+左、右,如果他们只有 1 个显示器)或显示 1 个表格每个用于双显示器设置。如果他们有 3 台显示器,而您恰好有 3 个全屏表单选项(等等),这将很好地扩展。
-
@Neolisk 我想你误解了我的意思,我的意思是它应该只在单个屏幕上最大化作为一个正常的应用程序,只是它应该像正常一样最大化,即:没有任何额外的空间底部并且没有更改为意味着它的一部分位于任务栏后面的大小
-
我以为您想在 2 个以上的屏幕上最大化。可以附上截图/模型来解释一下吗?
-
@Neolisk,按要求添加,希望清楚。
-
“移动事件处理程序”到底是什么?这个问题需要体面的重现代码才能去任何地方,需要包含设计时代码。
标签: .net vb.net winforms maximize