C#实现控件跟随窗体变化而变化

2025-10-26 22:46:13

1、在创建了空项目之后,先新建用户控件,取名MyForm,如下所示:

C#实现控件跟随窗体变化而变化

2、打开MyForm.cs,将代码里默认的UserControl改成Form,如下所示:

C#实现控件跟随窗体变化而变化

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窗口,打开窗口控件的代码,继承自定义控件,如下所示:

C#实现控件跟随窗体变化而变化

5、随便添加一个控件到Form1上,测试,如下所示:

C#实现控件跟随窗体变化而变化

C#实现控件跟随窗体变化而变化

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢