前言
网上有非常多的针对WinForm窗体根据屏幕分辨率自适应大小和位置的解决方案,其思路也是大同小异,都是在窗体构造时记录下每个控件的大小和位置信息,还有窗体设计时的大小,在窗体大小改变时,记录下改变后的窗体大小与设计时的大小的比值,然后利用这个比值去计算和控制每个控件的大小和位置。
这个思路是没问题的,可是在工程实践中,这只能满足基本的分辨率适应需求,有些需求始终满足不了,我举几个常见的例子。
无法满足需求的例子
例子一:
在一个需要自适应分辨率大小的窗体中,我需要点击一个按钮,点击后,我需要动态添加一段文字在窗体中心,并且之后无论窗体最大化还是回到正常大小,这段文字始终在最中心。
例子二:
我想在主窗体中动态添加一个窗体到panel中,同时让新添加的窗体能自适应当前屏幕分辨率。
例子三:
我想让字体也自适应屏幕分辨率。考虑到不同分辨率下字体的效果,我想要能在不同的分辨率下对字体缩放比例进行调整。
WinForm.AutoSizeHelper包
这些问题困扰了我一段时间,但都被我一一解决了,同时为了方便后人,我将其封装成了一个工具包上传到了nuget源上,它的名称叫WinForm.AutoSizeHelper,这个包专门用来解决winform自适应分辨率的问题,你可以在VS的nuget管理器中搜索并下载它。
关于这个包如何使用,以及如何解决我上面所说的三个问题,详情请看仓库中的demo。