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

 时间:2026-02-14 07:13:41

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#实现控件跟随窗体变化而变化

  • 如何修改Eclipse的背景色
  • css如何实现让列表自动产生序号
  • 如何用Eclipse导出war包
  • 如何用C#设计登录界面
  • NavicatPremium中如何导出数据到MSAccess
  • 热门搜索
    南山文化旅游区 泰山旅游 旅游线路 肇庆旅游 鹤壁旅游 宜兴旅游 南通旅游 旅游游记 欣欣旅游 澳门旅游攻略