Winform 窗体控件+字体自适应屏幕大小
AutoSizeFormClass类:
public class AutoSizeFormClass { /// <summary> /// 声明结构 记录控件位置和大小 /// </summary> public struct ControlRect { public int Left; public int Top; public int Width; public int Height; public float Size; } public List<ControlRect> _oldCtrl = new List<ControlRect>(); private int _ctrlNo = 0; private void AddControl(Control ctrl) { foreach (Control c in ctrl.Controls) { ControlRect cR; cR.Left = c.Left; cR.Top = c.Top; cR.Width = c.Width; cR.Height = c.Height; cR.Size = c.Font.Size; _oldCtrl.Add(cR); // 控件可能嵌套子控件 if (c.Controls.Count > 0) AddControl(c); } } public void ControlAutoSize(Control mForm) { if (_ctrlNo == 0) { ControlRect cR; cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; cR.Size = mForm.Font.Size; _oldCtrl.Add(cR); AddControl(mForm); } _ctrlNo = 1; float wScale = (float)mForm.Width / _oldCtrl[0].Width; float hScale = (float)mForm.Height / _oldCtrl[0].Height; AutoScaleControl(mForm, wScale, hScale); } private void AutoScaleControl(Control mForm, float wScale, float hScale) { int ctrlLeft, ctrlTop, ctrlWidth, ctrlHeight; float ctrlFontSize, hSize, wSize; foreach (Control c in mForm.Controls) { ctrlLeft = _oldCtrl[_ctrlNo].Left; ctrlTop = _oldCtrl[_ctrlNo].Top; ctrlWidth = _oldCtrl[_ctrlNo].Width; ctrlHeight = _oldCtrl[_ctrlNo].Height; ctrlFontSize = _oldCtrl[_ctrlNo].Size; c.Left = (int)Math.Ceiling(ctrlLeft * wScale); c.Top = (int)Math.Ceiling(ctrlTop * hScale); c.Width = (int)Math.Ceiling(ctrlWidth * wScale); c.Height = (int)Math.Ceiling(ctrlHeight * hScale); wSize = ctrlFontSize * wScale; hSize = ctrlFontSize * hScale; c.Font = new Font(c.Font.Name, Math.Min(hSize, wSize), c.Font.Style, c.Font.Unit); _ctrlNo++; // 先缩放控件本身 再缩放子控件 if (c.Controls.Count > 0) { AutoScaleControl(c, wScale, hScale); } } } }
MainFrom中添加:
AutoSizeFormClass asc = new AutoSizeFormClass(); private void MainForm_SizeChanged(object sender, EventArgs e) { asc.ControlAutoSize(this); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构