winfrom窗体比例缩放

用于控件大小随窗体大小等比例缩放的C#代码。该代码可以在窗体重载中使用,以确保窗体中的控件在窗体大小改变时能够按比例缩放。

  • SetTag方法:该方法用于设置控件的Tag属性,以存储控件的宽度、高度、左边距、顶边距和字体大小等信息。
  • SetControls方法:该方法用于遍历窗体中的控件,并根据窗体缩放的比例重新设置控件的大小和位置。

封装缩放函数

csharp 复制代码
/// <summary>
/// 定义当前窗体的宽度
/// </summary>
public static float X;
/// <summary>
/// 定义当前窗体的高度
/// </summary>
public static float Y;
/// <summary>
/// 控件大小随窗体大小等比例缩放,
/// 在窗体重载中使用
/// </summary>
/// <param name="cons"></param>
public static 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);
            }
        }
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="newx"></param>
    /// <param name="newy"></param>
    /// <param name="cons"></param>
public static void SetControls(float newx, float newy, Control cons)
{
    //遍历窗体中的控件,重新设置控件的值
    foreach(Control con in cons.Controls)
    {
        //获取控件的Tag属性值,并分割后存储字符串数组
        if(con.Tag != null)
        {
            string[] mytag = con.Tag.ToString().Split(new char[]
            {
                ';'
            });
            //根据窗体缩放的比例确定控件的值
            con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx); //宽度
            con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy); //高度
            con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx); //左边距
            con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy); //顶边距
            Single currentSize = System.Convert.ToSingle(mytag[4]) * newy; //字体大小
            con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
            if(con.Controls.Count > 0)
            {
                SetControls(newx, newy, con);
            }
        }
    }
}

窗体初始化时使用

csharp 复制代码
// 在窗体重载方法中调用SetTag方法,设置控件的Tag属性
public ExeStart()
{
    InitializeComponent();
    MechForm.X = this.Width;
    MechForm.Y = this.Height;
    MechForm.SetTag(this);
}

在Resize事件加载中使用

在窗体大小改变事件中调用SetControls方法,重新设置控件的大小和位置

csharp 复制代码
private void ExeStart_Resize(object sender, EventArgs e)
{
    float newX = this.Width / MechForm.X; //获取当前宽度与初始宽度的比例
    float newY = this.Height / MechForm.Y; //获取当前高度与初始高度的比例
    MechForm.SetControls(newX, newY, this);
}
相关推荐
韩立学长7 分钟前
基于Springboot校园志愿者服务平台77pz7812(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
Java基基23 分钟前
Spring让Java慢了30倍,JIT、AOT等让Java比Python快13倍,比C慢17%
java·开发语言·后端·spring
qq_124987075327 分钟前
基于SpringBoot微信小程序的智能在线预约挂号系统(源码+论文+部署+安装)
spring boot·后端·微信小程序·毕业设计·计算机毕设·毕业设计源码
Victor35644 分钟前
MongoDB(34)什么是聚合管道(Aggregation Pipeline)?
后端
Victor3561 小时前
MongoDB(35)聚合操作的常见阶段有哪些?
后端
追逐时光者1 小时前
2026年全面且实用的 Visual Studio 插件推荐,开发效率提升利器!
后端·visual studio
yuhaiqiang2 小时前
太牛了🐂,再也没有被AI 骗过,自从用了这个外挂 !必须装上
javascript·人工智能·后端
AD钙奶-lalala3 小时前
SpringBoot 4.0.3配置Swagger
java·spring boot·后端
IT_陈寒3 小时前
JavaScript开发者必知的5个性能杀手,你踩了几个坑?
前端·人工智能·后端
猹叉叉(学习版)4 小时前
【ASP.NET CORE】 6. 中间件
数据库·笔记·后端·中间件·c#·asp.net·.netcore