高dpi下,Vb.net调整控件位置的小经验 boy8199/3vdo/club
最近写了一个捕快TXT网文采集软件,结果发现在DPI不同的情况下,软件布局会变形. 找了半天原因才发现是DPI的问题,默认系统的dpi是96(100%)
现在显示器的屏幕比较大,所以好多人会把 显示放大到125%或150% 导致程序控件变形.
解决方案1\禁止软件跟随系统的dpi变化, \
(1)这是摘抄了一个方法.不一定对
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings/">true</dpiAware> </windowsSettings> </application>
(2)禁用方法: autosalemode=none 关闭各个控件的自动尺寸模式
2\ 就是 让软件跟随dpi自动变化, 把 autosalemode= 设置为DPI, 让控件跟随dpi进行自动调整. 因为该属性默认是根据font变化的,所以会变形.
但是即使设置了autosalemode=dpi ,依然有不少控件会变化, 这里好像有一个bug,有时控件会变形 有时不会变形,没有规律.
经过对比实验发现, 要使用 talelayoutpanel来进行控件布局,这样能让大多数控件自我进行调整.
个别不能自我调整的控件(比如靠右锁定的控件),我用下面的代码进行了调整.
1 ''' <summary> 2 ''' ' 根据DPI 调整个别控件的位置和大小 3 ''' </summary> 4 ''' <param name="DefaultDPI">缺省dip设置为96</param> 5 Private Sub AdjustControlsForDpiChange(Optional DefaultDPI As Single = 96.0!) 6 ' 获取当前窗体的 DPI 7 Dim currentDpiX As Single = Me.CreateGraphics().DpiX 8 Dim currentDpiY As Single = Me.CreateGraphics().DpiY 9 10 If currentDpiX <> DefaultDPI OrElse currentDpiY <> DefaultDPI Then 11 12 ' 计算缩放比例 13 Dim scaleX As Single = currentDpiX / DefaultDPI 14 Dim scaleY As Single = currentDpiY / DefaultDPI 15 16 pnlKaiCaiMianBan.Width = CInt(pnlKaiCaiMianBan.Width * scaleX) 17 pnlKaiCaiMianBan.Left = Me.Width - pnlKaiCaiMianBan.Width
end sub
标签:控件,Vb,DefaultDPI,Width,Single,dpi,net,DPI From: https://www.cnblogs.com/MadeInChinese/p/18069118