根据屏幕分辨率缩放表单控件

时间:2011-12-02 16:24:00

标签: vb.net screen-resolution

我正在尝试在vb 2010中编写独立于屏幕分辨率的程序。

我正在设计1920 * 1080的程序,当我将分辨率更改为例如800 * 600一切都爆炸,程序将无法适应屏幕。我该如何解决这个问题?

我尝试了三种不同的方法:

  1. 循环浏览所有控件并缩放其位置和尺寸

    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
    
  2. 将每个控件锚定到主窗体并仅调整主窗体的大小

  3. 尝试自动定标模式

    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)
    
  4. 这些方法都不适用于我。我究竟做错了什么? 我发现的一件事是我的主要形式大于800 * 600像素,所以当我以800 * 600分辨率运行设计器VS时将其缩小到812px,因此我对with和缩放比例的计算变得错误。此错误适用于所有三种方法。

    如果我做错了,请告知最佳方法。

1 个答案:

答案 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

响应式网页设计似乎与您正在做的事情相似。它背后的想法是让您的网站能够处理任何客户端设备 - 由于移动爆炸,这一点变得非常重要。 我建议在这些领域做一些研究,以找到一个好的解决方案。