2018-04-12 窗体设计:自动调整控件大小

1、 原始窗体:
2、 现要实现:当拖拽窗体进行伸缩变化时,窗体中包含的所有控件诸如“确定”button随着窗体大小变化。
3、 实现方法步骤:

1)双击窗体添加Load()函数,函数中添加一下代码:

private void Form1_Load(object sender, EventArgs e) {
         this.Resize += new EventHandler(Form1_Resize); //窗体调整大小时引发事件
          X = this.Width; //获取窗体的宽度
          Y = this.Height; //获取窗体的高度
          setTag(this); //调用方法      
}

2)获取控件的width、height、left、top、字体大小的值,添加一下代码:

private 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);
            }
        }

3)根据窗体大小调整控件大小,添加一下代码:

        private void setControls(float newx, float newy, Control cons)
        {
            //遍历窗体中的控件,重新设置控件的值
            foreach (Control con in cons.Controls)
            {
                string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                //获取控件的Tag属性值,并分割后存储字符串数组
                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);
                }
            }
        }

4)对窗体添加Resize()函数

void Form1_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();
            //窗体标题栏文本
        }

4、 效果图:


本文作者:李俊

<上一篇 目录 下一篇>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,315评论 25 708
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,594评论 0 11
  • Qt 布局系统介绍 布局系统 作为一名 iOS 开发人员, 见证着 iOS 布局系统的不断完善, 从绝对布局, A...
    旭丶Joy阅读 14,089评论 6 19
  • 承载着无数的向往,数度辗转颠簸,几多孤衿寒被,十年寒窗艰辛,让梦想急走狂奔,一路跌跌撞撞爬出乡村,一头扎进喧...
    夜静春山阅读 429评论 1 1
  • 抽象过程 概念    所有编程语言都提供抽象机制,人们所能解决问题的复杂性直接取决于抽象的类型和质量。这里类型指的...
    意大利大炮阅读 160评论 0 0