zoukankan      html  css  js  c++  java
  • C#自定义控件实现控件随窗口大小改变

    1.新建用户控件,取名MyForm。

    image

    2.将默认的UserControl改成Form

    image

    3.在类中添加以下代码

    private float X, Y;
            //获得控件的长度、宽度、位置、字体大小的数据
            private void setTag(Control cons)//Control类,定义控件的基类
            {
                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);//递归算法
                }
            }
    
            private void setControls(float newx, float newy, Control cons)//实现控件以及字体的缩放
            {
                foreach (Control con in cons.Controls)
                {
                    string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                    float a = Convert.ToSingle(mytag[0]) * newx;
                    con.Width = (int)a;
                    a = Convert.ToSingle(mytag[1]) * newy;
                    con.Height = (int)(a);
                    a = Convert.ToSingle(mytag[2]) * newx;
                    con.Left = (int)(a);
                    a = Convert.ToSingle(mytag[3]) * newy;
                    con.Top = (int)(a);
                    Single currentSize = 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);//递归
                    }
                }
            }
    
    
            private void MyForm_Resize(object sender, EventArgs e)
            {
                float newx = (this.Width) / X;//当前宽度与变化前宽度之比
                float newy = this.Height / Y;//当前高度与变化前宽度之比
                setControls(newx, newy, this);
                this.Text = this.Width.ToString() + " " + this.Height.ToString();  //窗体标题显示长度和宽度
            }
    
    
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
                this.Resize += new EventHandler(MyForm_Resize);
                X = this.Width;
                Y = this.Height;
                setTag(this);
            }

    4.新建windows窗口,继承自定义控件

    image

    5.随便添加一个控件到Form1上,测试。

    image

    image

    注:如果需要在窗口中动态添加控件,会出现bug!

  • 相关阅读:
    在Chrome浏览器中保存的密码有多安全?
    进程上下文切换 – 残酷的性能杀手(上)
    进程上下文切换 – 残酷的性能杀手(下)
    javascript推荐书籍
    使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序
    Source Insight 3.X 标签插件v1.0发布
    QQ空间自动发广告解决方法
    Java---实力弹弹球,弹弹弹
    HDOJ 2027 统计元音
    Java---计算机贷款支付额计算(用对话框实现)
  • 原文地址:https://www.cnblogs.com/wocaca/p/3275902.html
Copyright © 2011-2022 走看看