高dpi下,Vb.net调整控件位置的小经验
高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.net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义