.net 根据屏幕分辨率更改表单分辨率(不更改显示器分辨率并使用最大化屏幕选项)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4643693/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Change Resolution Of Form Based On Screen Resolution ( without changing monitor resolution and using Maximized screen option )
提问by Preeti
I searched on the forums, and I tried a few things... but they didn't really seem to work. Let me lay out my problem.
我在论坛上搜索,并尝试了一些东西……但它们似乎并没有真正起作用。让我列出我的问题。
I have a very high screen resolution on my laptop: 1400x1050. I'm designing my app on this.
我的笔记本电脑的屏幕分辨率非常高:1400x1050。我正在设计我的应用程序。
My colleague tried it out on his laptop (which had lesser resolution), and the application did not fit on his laptop. The buttons were dragging out of the screen space.
我的同事在他的笔记本电脑(分辨率较低)上试用了它,但该应用程序不适合他的笔记本电脑。按钮被拖出屏幕空间。
So, I want my application to automatically resize/adjust based upon the screen resolution. I found some similar forums, and I tried a few things suggested by developers, but that did not really work out for me.
所以,我希望我的应用程序根据屏幕分辨率自动调整大小/调整。我找到了一些类似的论坛,并尝试了开发人员建议的一些方法,但这对我来说并不奏效。
I tried : Solution 1: But is changing user's screen resution in place of adjusting form .
我尝试过: 解决方案 1:但是正在更改用户的屏幕分辨率而不是调整表单。
I don't want to use Maximized screen option and don't want to change user's pc settings. Unfortunatly I am not using Table Layout panel.
我不想使用最大化屏幕选项,也不想更改用户的电脑设置。不幸的是,我没有使用表格布局面板。
Please suggest me a simple solution.
请建议我一个简单的解决方案。
回答by Francesco Belladonna
I know it's stupid but... did you try to set control "anchors"?
我知道这很愚蠢,但是...您是否尝试设置控制“锚点”?
They allows your control to resize when you resize your form, maybe can help you, also think about using scrollbars
当您调整表单大小时,它们允许您的控件调整大小,也许可以帮助您,也可以考虑使用滚动条
回答by JoshuaDavid
OK, this is just about as simple as it gets. Just iterate through the VB controls and adjust their sizes based on the ratio of the new screen resolution to your design screen resolution. i.e., something like:
好的,这就是最简单的。只需遍历 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
NOTE that I'm using reflection to see if each control has the properties we need to adjust. The way I'm doing it is clean but uses "late binding" and requires Option Strict Off. Tested and approved.
请注意,我正在使用反射来查看每个控件是否具有我们需要调整的属性。我这样做的方式很干净,但使用“后期绑定”并且需要 Option Strict Off。经过测试和批准。
回答by Justin
You can use the following code to get the height and width of the primary screen:
您可以使用以下代码获取主屏幕的高度和宽度:
Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width
Dim intY As Integer = Screen.PrimaryScreen.Bounds.Height
Given this you should perform a check when the form loads to ensure your forms width is smaller than the screens width:
鉴于此,您应该在表单加载时执行检查,以确保您的表单宽度小于屏幕宽度:
// This is pseudocode, as I usually do C#:
MyForm.Width = Min(ScreenWidth, MyForm.Width)
MyForm.Height = Min(ScreenHeight, MyForm.Height)
That should do the trick in most scenarios (as long as your form already handles being resized) - if you want to cater for multiple screens then some additional logic will be needed to get the dimensions of the screen that your form starts in, but this sounds like overkill for what you want.
在大多数情况下,这应该可以解决问题(只要您的表单已经处理了调整大小)-如果您想满足多个屏幕的需求,则需要一些额外的逻辑来获取表单开始的屏幕尺寸,但这听起来对你想要的东西来说太过分了。
回答by Benjamin Gale
Simple solution?
简单的解决方案?
Design your application at the lowest expected resolution (E.G. 800x600) so that it can be scaled UP.
以最低的预期分辨率 (EG 800x600) 设计您的应用程序,以便可以将其放大。
回答by Erno
If you are not able or willing to scale down some controls you might be able or willing to use some kind of panels that can be pinned/shown/hidden at the users will. That will give you more flexibility.
如果您不能或不愿意缩小某些控件的比例,您可能能够或愿意使用某种可以按用户意愿固定/显示/隐藏的面板。这会给你更多的灵活性。
回答by Jay
vb.net 2013 Found some of this code on this site, can't find it now to give credit!:-( Made at 15.5 laptop res of 1780x760, changes to users primary screen working area. Resize controls to match forms new size, and the fonts too if it hits a certain res over original. Try it, play with it.
vb.net 2013 在此站点上找到了一些此代码,现在找不到了!:-( 在 1780x760 的 15.5 笔记本电脑分辨率上制作,更改用户主屏幕工作区域。调整控件大小以匹配表单新大小,还有字体,如果它比原版达到一定的分辨率。试试吧,玩吧。
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

