using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace SLZ_4 { public class AutoResizeForm : Form { private Dictionary originalRects = new Dictionary(); private Size originalSize; public AutoResizeForm() { this.Load += (s, e) => { originalSize = this.ClientSize; StoreOriginalSizes(this); }; this.Resize += Form_Resize; } private void StoreOriginalSizes(Control parent) { foreach (Control ctrl in parent.Controls) { originalRects[ctrl] = new Rectangle( ctrl.Left, ctrl.Top, ctrl.Width, ctrl.Height); if (ctrl.Controls.Count > 0) StoreOriginalSizes(ctrl); } } private void Form_Resize(object sender, EventArgs e) { if (originalSize.Width == 0 || originalSize.Height == 0) return; float xRatio = (float)ClientSize.Width / originalSize.Width; float yRatio = (float)ClientSize.Height / originalSize.Height; foreach (var entry in originalRects) { Control ctrl = entry.Key; Rectangle rect = entry.Value; ctrl.Left = (int)(rect.Left * xRatio); ctrl.Top = (int)(rect.Top * yRatio); ctrl.Width = (int)(rect.Width * xRatio); ctrl.Height = (int)(rect.Height * yRatio); // 字体自适应(可选) if (ctrl.Font != null) { if (xRatio > 1 && yRatio > 1) { ctrl.Font = new Font(ctrl.Font.FontFamily, ctrl.Font.Size * (float)1.2); } else { ctrl.Font = new Font(ctrl.Font.FontFamily, ctrl.Font.Size * (float)0.8); } } } //originalSize.Width = ClientSize.Width; //originalSize.Height = ClientSize.Height; } } }