根据屏幕分辨率更改表格分辨率(不更改显示器分辨率并使用最大化屏幕选项)

时间:2011-01-10 04:29:10

标签: .net vb.net visual-studio-2005 screen-resolution

我在论坛上搜索过,我尝试了一些东西......但它们似乎并没有真正起作用。让我说出我的问题。

我的笔记本电脑屏幕分辨率非常高:1400x1050。我正在设计我的应用程序。

我的同事在他的笔记本电脑上测试了它(分辨率较低),并且应用程序不适合他的笔记本电脑。按钮被拖出屏幕空间。

因此,我希望我的应用程序根据屏幕分辨率自动调整大小/进行调整。 我发现了一些类似的论坛,我尝试了开发人员提出的一些建议,但这对我来说并不合适。

我试过了:  Solution 1:但是正在改变用户的屏幕重新调整,而不是调整表格。

我不想使用最大化屏幕选项,也不想更改用户的电脑设置。 不幸的是,我没有使用表格布局面板。

请建议我一个简单的解决方案。

7 个答案:

答案 0 :(得分:2)

我知道这很愚蠢,但是......你试图设置控制“锚点”吗?

它们允许您的控件在调整表单大小时调整大小,也许可以帮助您,也可以考虑使用滚动条

答案 1 :(得分:2)

好的,这就像它得到的一样简单。只需迭代VB控件并根据新屏幕分辨率与设计屏幕分辨率的比例调整其大小。即,像:

    Dim DesignScreenWidth As Integer = 1600
    Dim DesignScreenHeight As Integer = 1200
    Dim CurrentScreenWidth As Integer = Screen.PrimaryScreen.Bounds.Width
    Dim CurrentScreenHeight As Integer = Screen.PrimaryScreen.Bounds.Height
    Dim RatioX as Double = CurrentScreenWidth / DesignScreenWidth
    Dim RatioY as Double = CurrentScreenHeight / DesignScreenHeight
    For Each iControl In Me.Controls
        With iControl
            If (.GetType.GetProperty("Width").CanRead) Then .Width = CInt(.Width * RatioX)
            If (.GetType.GetProperty("Height").CanRead) Then .Height = CInt(.Height * RatioY)
            If (.GetType.GetProperty("Top").CanRead) Then .Top = CInt(.Top * RatioX)
            If (.GetType.GetProperty("Left").CanRead) Then .Left = CInt(.Left * RatioY)
        End With
    Next

注意我正在使用反射来查看每个控件是否具有我们需要调整的属性。我正在做的方式是干净但使用“后期绑定”并要求Option Strict Off。经过测试和批准。

答案 2 :(得分:1)

您可以使用以下代码获取主屏幕的高度和宽度:

Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width
Dim intY As Integer = Screen.PrimaryScreen.Bounds.Height

鉴于此,您应该在表单加载时执行检查,以确保表单宽度小于屏幕宽度:

// This is pseudocode, as I usually do C#:
MyForm.Width = Min(ScreenWidth, MyForm.Width)
MyForm.Height = Min(ScreenHeight, MyForm.Height)

在大多数情况下都应该这样做(只要您的表单已处理调整大小) - 如果您想要满足多个屏幕的需要,那么需要一些额外的逻辑来获取表单开始的屏幕尺寸,但这听起来有点像你想要的东西。

答案 3 :(得分:1)

简单的解决方案?

以最低预期分辨率(E.G. 800x600)设计您的应用程序,以便可以按比例缩放。

答案 4 :(得分:0)

如果您无法或不愿意缩小某些控件,您可能或者愿意使用可以固定/显示/隐藏在用户身上的某种面板。这将为您提供更大的灵活性。

Have a look at these.

答案 5 :(得分:0)

vb.net 2013在这个网站上发现了一些这样的代码,现在找不到它给予信用!:-(制作15.5笔记本电脑的1780x760,更改用户主屏幕工作区。调整控件以匹配表格新的尺寸,以及字体,如果它击中一个特定的res超过原始。尝试它,玩它。

Option Strict On
Option Explicit On
Public Class Form1
    ' For screen size changes. 
    Dim cw As Integer ' Forms current Width.
    Dim ch As Integer ' Forms current Height.
    Dim iw As Integer = 1280 ' Forms initial width.
    Dim ih As Integer = 760 ' Forms initial height.
    ' Retrieve the working rectangle from the Screen class using the        PrimaryScreen and the WorkingArea properties.  
    Dim workingRectangle As System.Drawing.Rectangle =     Screen.PrimaryScreen.WorkingArea

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Set the size of the form slightly less than size of working rectangle. 
    Me.Size = New System.Drawing.Size(workingRectangle.Width - 5, workingRectangle.Height - 5)
    ' Set the location so the entire form is visible. 
    Me.Location = New System.Drawing.Point(3, 3)
End Sub

Private Sub Main_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    ' Change controls size and fonts to fit screen working area..
    Dim rw As Double = (Me.Width - cw) / cw ' Ratio change of original form width.
    Dim rh As Double = (Me.Height - ch) / ch ' Ratio change of original form height.
    ' Change controls size to fit users screen working area.
    For Each Ctrl As Control In Controls
        Ctrl.Width += CInt(Ctrl.Width * rw)
        Ctrl.Height += CInt(Ctrl.Height * rh)
        Ctrl.Left += CInt(Ctrl.Left * rw)
        Ctrl.Top += CInt(Ctrl.Top * rh)
    Next
    cw = Me.Width
    ch = Me.Height
    ' Change all the forms controls font size.
    Dim nfsize As Single
    If cw > iw + 500 Then
        For Each Ctrl As Control In Controls
            ' Get the forms controls font size's property and increase it. Reset the font to the new size. 
            nfsize = Me.Font.Size + 3
            Ctrl.Font = New Font(Ctrl.Font.Name, nfsize, FontStyle.Bold, Ctrl.Font.Unit)
        Next
    Else
        Exit Sub
    End If
End Sub

答案 6 :(得分:0)

我认为在VB.Net中,通过更改表单属性的两个值,可以更轻松地做到这一点。

  1. AutoSize = True

  2. AutoScaleMode = Dpi

谢谢。