Winform不同分辨率系统下界面混乱
2024-10-17
30
产生界面混乱的主要原因是,winform程序的坐标是基于点(Point)的,而Point又与DPI相关。
一英寸 = 96pixels96DPI是windows的默认DPI,当它被用户更改后,可能就会导致界面与设计之初产生了错乱。
在网上搜索相关资料后,试着将this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 但是经实测后,发现仍然没有解决问题:有些界面甚至显示不全;有些控件甚至会被“截断”或完全不显示。
原因是:默认情况下winfrom的Font单位是Point,最终显示在界面上的尺寸将根据DPI设置自动变化,可以表示为公式: Point / 72 * DPI = Pixel 按照MSDN的解释,上述设置比较适合关心程序的可视区域及控件文字在不同的DPI下总是显示设计时的大小,而不用关心程序界面的绝对大小的情况。
后来想到web程序中的常用单位是像素(pixel),在不同的机器上也能很好地呈现网页布局。那么如果能在winform程序中也使用像素来定位,问题不就解决了吗?
在winform中实现该计量单位非常简单,仅需要在Form的的构造函数中作如下设置即可:
private void InitializeComponent()
{
//设定按字体来缩放控件
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
//设定字体大小为12px
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(134)));
}
这样设置之后,在不同的DPI下,界面将整体缩放而不会凌乱,利用的就是DPI本身的特性。
更新于:1个月前赞一波!
相关文章
- winform如何隐藏边框和标题栏
- C# winform实现文件下载进度条功能
- C# WinForm使用CefSharp内嵌网页
- C# Winform使用DataGridView显示表格数据
- 免费开源WinForm UI控件库ReaLTaiizor
- winform里的CheckForIllegalCrossThreadCalls
- winform最小化到系统托盘
- winform右击NotifyIcon显示菜单
- C# Winform系统托盘图标动态闪烁
- C# Winform窗体的浮动及隐藏
- C# Winform实现多个窗体之间切换
- .NET winform和WPF的区别是什么?
- Winform跨线程更新UI
- Winform MDI父窗体设置透明度无效
- Winform在Mdi父窗体中打开子窗体
- VS2022 Winform没有工具箱控件列表
- ReaLTaiizor | 开源免费的.NET WinForm UI库
- .NET Winform高分辨率系统下界面混乱问题
文章评论
评论问答