.net 根据屏幕分辨率更改窗体分辨率(不更改监视器分辨率并使用最大化屏幕选项)

.net 根据屏幕分辨率更改窗体分辨率(不更改监视器分辨率并使用最大化屏幕选项),.net,vb.net,visual-studio-2005,screen-resolution,.net,Vb.net,Visual Studio 2005,Screen Resolution,我在论坛上搜索,我尝试了一些东西。。。但它们似乎并没有真正起作用。让我来说明我的问题 我的笔记本电脑屏幕分辨率很高:1400x1050。我正在这个平台上设计我的应用程序 我的同事在他的笔记本电脑上试用了它(分辨率较低),但该应用程序不适合他的笔记本电脑。按钮被拖出屏幕空间 因此,我希望我的应用程序根据屏幕分辨率自动调整大小。 我发现了一些类似的论坛,我尝试了开发人员提出的一些建议,但这对我来说并没有真正起作用 我试过: :但正在更改用户的屏幕恢复以代替调整表单 我不想使用最大化屏幕选项,也不想更

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

我的笔记本电脑屏幕分辨率很高:1400x1050。我正在这个平台上设计我的应用程序

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

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

我试过: :但正在更改用户的屏幕恢复以代替调整表单

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


请给我一个简单的解决方案

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

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)

在大多数情况下(只要您的表单已经处理了大小调整),这应该可以做到这一点-如果您想适应多个屏幕,那么需要一些额外的逻辑来获得表单开始时的屏幕尺寸,但是这听起来像是对你想要的东西的过度使用。

如果你不能或不愿意缩小一些控件,你可能能够或愿意使用某种面板,这些面板可以根据用户的意愿固定/显示/隐藏。这将给你更多的灵活性

简单的解决方案


以最低的预期分辨率(例如800x600)设计应用程序,使其可以放大。

我知道这很愚蠢,但。。。您是否尝试设置控件“锚定”


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

好的,这很简单。只需遍历VB控件,并根据新屏幕分辨率与设计屏幕分辨率的比率调整它们的大小。i、 例如:

    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

请注意,我使用反射来查看每个控件是否具有需要调整的属性。我这样做的方式是干净的,但是使用“后期绑定”,并且需要关闭选项。已测试并批准。

vb.net 2013在该网站上找到了一些此代码,现在无法找到它以提供学分!:-(笔记本电脑分辨率为15.5,1780x760,更改为用户主屏幕工作区。调整控件大小以匹配表单的新大小,如果达到原始分辨率,则字体也会改变。试试,玩一下

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

我认为在VB.Net中有一种更简单的方法可以做到这一点,即更改form属性的两个值

  • AutoSize=True

  • AutoScaleMode=Dpi


  • 谢谢。

    你能给表单添加一个截图吗?我需要看看你是否能拉伸任何控件。有一些选项可以根据字体大小等来缩放表单,但这取决于你想要的最终效果。我不能把截图放在这里。但可以告诉你一些表单详细信息:表单大小:1130863,开始位置:中心屏幕和窗口状态:Normal(包含近80个UI组件)你尝试过<代码> AutoScaleMode <代码>属性设置为<代码> DPI ?我的方法是设计最小的实际窗口,并允许事物以有用的方式增长。不幸的是,我的代码是C++的,对你没有帮助。这个解决方案不是Wrkkras.jje。你能更具体吗?你不能检索屏幕W吗?idths/height?您是否正在努力解决如何设置窗体宽度/高度的问题?我可以动态更改窗体大小,但窗体控件无法随之调整大小。这会导致某些控件丢失。@Jene-您需要使用锚定和停靠设置配置窗体控件,以便在调整窗体大小时它们能够正确移动和调整大小rm。当您拥有此权限时,您将能够在窗体设计器中调整窗体的大小,并观看所有控件的适当大小调整。最近,我被要求了解如何动态调整窗体及其控件的大小。我成功地使用了几乎相似的技术,即迭代所有组件,然后设置其大小根据比率,我也对字体进行了调整。我不想调整控件的大小,但要重新定位它们;我希望它们位于表单的中心。你知道怎么做吗?当我们想调整控件大小时,而不是只调整位置时,你的解决方案很好。我使用了
    Top
    ,但当我最大化窗口时,所有控件都会改变e它的位置在顶部。我希望它们在中间(我不能使用顶部和底部,因为控件将被调整大小)。