winform窗体程序适应不同的分辨率
如何让自己编写的winform窗体应用程序适应不同的分辨率
解决思路:
1、窗体加载时获取窗体的长x1和宽y1;
2、使用窗体的Resize()事件,当窗体尺寸发生变化时,获得窗体变化后的长x2和宽y2,将x2/x1得到kx,将y2/y1得到ky
3、遍历窗体中的所有控件,将控件的位置,大小,字体大小按照kx和ky比例进行调整;
namespace AutoFitDemo { public partial class Form1 : Form { //如何实现winform窗体在不同分辨率下的自适应 //解决思路,根据窗体的缩放比例,调整窗体中每个控件的位置、尺寸和字体的大小 //需要注意的是,panel,tableLayoutPanel下的控件需要通过递归的方法取得控件 float x, y; public Form1() { InitializeComponent(); x=this.Width; y=this.Height; this.Resize += Form1_Resize; this.Load += Form1_Load; } private void Form1_Load(object sender, EventArgs e) { setTag(this); } private void Form1_Resize(object sender, EventArgs e) { float kx = this.Width / x; float ky = this.Height / y; setControls(kx, ky, this); } private void setControls(float kx, float ky, Control cons) { foreach (Control con in cons.Controls) { string[] tag = con.Tag.ToString().Split(';'); con.Width =Convert.ToInt32(Convert.ToSingle(tag[0])*kx); con.Height =Convert.ToInt32(Convert.ToSingle(tag[1])*ky); con.Left =Convert.ToInt32(Convert.ToSingle(tag[2])*kx); con.Top =Convert.ToInt32(Convert.ToSingle(tag[3])*ky); con.Font=new Font (con.Font.Name, Convert.ToSingle(tag[4])*kx ,con.Font.Style,con.Font.Unit); if (con.Controls.Count>0) { setControls(kx, ky, con); } } } void setTag(Control cons) { foreach (Control con in cons.Controls) { con.Tag = con.Width + ";" + con.Height + ";" + con.Left + ";" + con.Top + ";" + con.Font.Size; if (con.Controls.Count> 0) { setTag(con); } Console.WriteLine(con.Name); } } } }
效果:
原始窗体:
调整窗体的长宽后:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?