我在论坛上搜索过,我尝试了一些东西......但它们似乎并没有真正起作用。让我说出我的问题。
我的笔记本电脑屏幕分辨率非常高:1400x1050。我正在设计我的应用程序。
我的同事在他的笔记本电脑上测试了它(分辨率较低),并且应用程序不适合他的笔记本电脑。按钮被拖出屏幕空间。
因此,我希望我的应用程序根据屏幕分辨率自动调整大小/进行调整。 我发现了一些类似的论坛,我尝试了开发人员提出的一些建议,但这对我来说并不合适。
我试过了: Solution 1:但是正在改变用户的屏幕重新调整,而不是调整表格。
我不想使用最大化屏幕选项,也不想更改用户的电脑设置。 不幸的是,我没有使用表格布局面板。
请建议我一个简单的解决方案。
答案 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)
如果您无法或不愿意缩小某些控件,您可能或者愿意使用可以固定/显示/隐藏在用户身上的某种面板。这将为您提供更大的灵活性。
答案 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中,通过更改表单属性的两个值,可以更轻松地做到这一点。
AutoSize = True
AutoScaleMode = Dpi
谢谢。