阅读 84

窗体控件缩放-C#学习随笔

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Form_Controls_Scaling
{
  public partial class Scaling : Form
  {
    public Scaling()
    {
      InitializeComponent();

      this.MinimumSize = new Size(400, 400);  //设置窗体最小尺寸

    }

    #region 定义全局变量
    float origin_width; //起始窗体宽度
    float origin_height; //起始窗体高度
    #endregion

    protected override void OnLoad(EventArgs e) //窗体加载
    {
      base.OnLoad(e);

      origin_width = this.Width; //赋值起始窗体宽度
      origin_height = this.Height; //赋值起始窗体高度
      SetTag(this); //记录当前窗体控件信息
    }

    protected void SetTag(Control controls) //记录当前窗体控件信息
    {
      foreach (Control control in controls.Controls) //遍历当前窗体控件
      {
        control.Tag = control.Width + "," + control.Height + "," + control.Top + "," + control.Left + "," + control.Font.Size; //记录信息
        if (control.Controls.Count > 0) //判断是否存在子控件
        {
          SetTag(control); //记录子控件信息
        }
      }
    }

    protected override void OnResize(EventArgs e) //窗体控件大小改变
    {
      base.OnResize(e);

      float scale_Width = Width / origin_width; //计算控件宽度缩放比例
      float scale_Height = Height / origin_height; //计算控件高度缩放比例
      SetControls(scale_Width, scale_Height, this); //窗体控件缩放
    }

    protected void SetControls(float scale_Width, float scale_Height, Control controls) //窗体孔家缩放
    {
      foreach (Control control in controls.Controls) //遍历窗体控件
      {
        string[] controlTag = control.Tag.ToString().Split(‘,‘); //分割控件信息
        float newWidth = Convert.ToSingle(controlTag[0]) * scale_Width; //计算新控件宽度
        float newHeight = Convert.ToSingle(controlTag[1]) * scale_Height; //计算新控件高度
        float newTop = Convert.ToSingle(controlTag[2]) * scale_Width; //计算新控件顶部距离
        float newLeft = Convert.ToSingle(controlTag[3]) * scale_Height; //计算新控件左侧距离
        float fontSize = Convert.ToSingle(controlTag[4]) * scale_Height; //计算新控件文字高度

        control.Width = Convert.ToInt32(newWidth); //赋值新控件宽度
        control.Height = Convert.ToInt32(newHeight); //赋值新控件高度
        control.Top = Convert.ToInt32(newTop); //赋值新控件顶部距离
        control.Left = Convert.ToInt32(newLeft); //赋值新控件左侧距离
        control.Font = new Font(control.Font.Name, fontSize, control.Font.Style, control.Font.Unit); //赋值新控件字体高度

        if (control.Controls.Count > 0) //判断是否存在子控件
        {
          SetControls(newWidth, newHeight, control); //设置子控件
        }
      }
    }
  }
}

原文:https://www.cnblogs.com/REGO101100/p/14844613.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐