Winform控件大小位置随窗体变化
1.插入以下方法
/// <summary> /// 读取控件的大小位置属性,保存在Tag里面 /// </summary> /// <param name="control"></param> void SetTag(Control control) { foreach (Control item in control.Controls) { item.Tag = item.Left.ToString() + "," + item.Top.ToString() + "," + item.Width.ToString() + "," + item.Height.ToString()+","; if (item.HasChildren) { SetTag(item); } } } /// <summary> /// 设置控件的大小位置 /// </summary> /// <param name="control"></param> /// <param name="scaleX"></param> /// <param name="scaleY"></param> void SetContrlos(Control control,double scaleX,double scaleY) { foreach (Control item in control.Controls) { string stag = (string)item.Tag; if (stag == null) return; string[] strings = stag.Split(','); item.Location = new Point((int)(double.Parse(strings[0]) * scaleX), (int)(double.Parse(strings[1]) * scaleY)); item.Size = new Size((int)(double.Parse(strings[2]) * scaleX), (int)(double.Parse(strings[3]) * scaleY)); if (item.HasChildren) { SetContrlos(item,scaleX,scaleY); } } }
2.在窗体的构造函数和大小事件中插入代码
public Form1() { InitializeComponent(); this.Tag = this.Width.ToString()+","+this.Height.ToString(); SetTag(this); } private void Form1_Resize(object sender, EventArgs e) { string stag=(string)this.Tag; if (stag == null) return; string[] strings=stag.Split(','); double x = (double)this.Width / Convert.ToDouble(strings[0]); double y = (double)this.Height / Convert.ToDouble(strings[1]); SetContrlos(this,x,y); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App