我正在尝试在vb 2010中编写独立于屏幕分辨率的程序。
我正在设计1920 * 1080的程序,当我将分辨率更改为例如800 * 600一切都爆炸,程序将无法适应屏幕。我该如何解决这个问题?
我尝试了三种不同的方法:
循环浏览所有控件并缩放其位置和尺寸
Friend Sub ResizeControl(ByRef ctl As Control)
'---------------------------- GET SCALES -------------------------
Dim DesignScreenWidth As Integer = 1920
Dim DesignScreenHeight As Integer = 1080
Dim CurrentScreenWidth As Integer = Screen.PrimaryScreen.Bounds.Width
Dim CurrentScreenHeight As Integer = Screen.PrimaryScreen.Bounds.Height
'Ratios
Dim ratioX As Double = CurrentScreenWidth / DesignScreenWidth ' e.g. 800/1920
Dim ratioY As Double = CurrentScreenHeight / DesignScreenHeight
With ctl
Dim height As Integer = Math.Min(.Height, CurrentScreenHeight)
Dim width As Integer = Math.Min(.Width, CurrentScreenWidth)
'Position
If (.GetType.GetProperty("Top").CanRead) Then .Top = CInt(.Top * ratioY)
If (.GetType.GetProperty("Left").CanRead) Then .Left = CInt(.Left * ratioX)
'Size
If (.GetType.GetProperty("Width").CanRead) Then .Width = CInt(width * ratioX)
If (.GetType.GetProperty("Height").CanRead) Then .Height = CInt(height * ratioY)
End With
'---------------------- RESIZE SUB CONTROLS -------------------------------
For Each subCtl As Control In ctl.Controls
ResizeControl(subCtl)
Next subCtl
End Sub
将每个控件锚定到主窗体并仅调整主窗体的大小
尝试自动定标模式
Dim factorX As Double = ratioX * 96.0F
Dim factorY As Double = ratioY * 96.0F
Dim newSize As SizeF = New SizeF(factorX, factorY)
AutoScaleDimensions = newSize
AutoScaleMode = AutoScaleMode.Dpi
Scale(newSize)
Font = New Font(Font.FontFamily, Font.Size * factorX)
这些方法都不适用于我。我究竟做错了什么? 我发现的一件事是我的主要形式大于800 * 600像素,所以当我以800 * 600分辨率运行设计器VS时将其缩小到812px,因此我对with和缩放比例的计算变得错误。此错误适用于所有三种方法。
如果我做错了,请告知最佳方法。
答案 0 :(得分:1)
作为对我的第一个评论的扩展,请看一下UX(用户体验)世界中的一些最佳实践。有很多科学和审议工作可以用于UI。
有一个很棒的SE网站 - 你可能会发现ux.stackexchange.com可以比SO更好地回答你的任务。 以下是您可能会发现有用的一些问题: https://ux.stackexchange.com/questions/3414/desktop-software-design-patterns(请参阅MS& Apple有自己的指南,包括按钮宽度等内容)
https://ux.stackexchange.com/questions/11361/responsive-web-design-technique-in-desktop-application
响应式网页设计似乎与您正在做的事情相似。它背后的想法是让您的网站能够处理任何客户端设备 - 由于移动爆炸,这一点变得非常重要。 我建议在这些领域做一些研究,以找到一个好的解决方案。