vs2013 窗体应用编程—控件大小随窗体变化(通过代码实现)

转载 2016年04月11日 23:15:35

在form.cs:添加变量记录窗体大小,每次窗体大小变化时记录放缩比并且更改大小数据(通过窗体的Resize事件触发),对于控件则是同控件标签Tag来记录大小并且控制变化。具体代码如下:

namespace Example
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private float X; private float Y;
        //获取控件的width、height、left、top、字体大小的值
        //存放在控件的Tag属性中
        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);
            }
        }
        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);
                }
            }
        }
        //根据窗体大小调整控件大小
        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);
                }
            }

        }
        //
        void Form1_Resize(object sender, EventArgs e)
        {
           
            float newx = (this.Width) / X; //窗体宽度缩放比例
            float newy = this.Height / Y;//窗体高度缩放比例
            setControls(newx, newy, this);//随窗体改变控件大小
            this.Text = "witdth:"+this.Width.ToString() + " heighet:   " + this.Height.ToString();//窗体标题栏文本

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Resize += new EventHandler(Form1_Resize);//窗体调整大小时引发事件

            X = this.Width;//获取窗体的宽度
            Y = this.Height;//获取窗体的高度
            setTag(this);//调用方法
        }

    }
}


WinForm 中的 Form_Load函数和他的构造函数 public Form()有什么区别?

不都是用来初始化FORM中的组件么? public Form()所谓的构造函数。 Form_Load所谓的窗体加载函数 完全两码事! WinForm 中的 Form_Load函数和他的...
  • jiangfei009003
  • jiangfei009003
  • 2012年03月11日 12:15
  • 1167

求助!!!“测试.Form1”不包含“Form1_Load”的定义,并且找不到可接受类型为“测试.Form1”的第一个参数的扩展方法“Form1_Load”(是否缺少 using 指令或程序集引用?)

写的是一个窗体的Load /Click/Closing 事件,出现错误错误    1    “测试.Form1”不包含“Form1_Load”的定义,并且找不到可接受类型为“测试.Form1”的第一个...
  • xiaoyong21
  • xiaoyong21
  • 2012年11月19日 16:54
  • 3010

VS2010编写MFC程序,调整窗口大小和实现窗口最大化、最小化方法。

MFC调整窗口大小
  • u014360668
  • u014360668
  • 2015年05月13日 21:58
  • 4214

【C#】窗体控件随窗体大小改变(包括字体大小)

其实Anchor和Dock属性也可以实现,但好象只对容器效果理想,而且字体大小也没有变化.最近论坛上有好多这样的贴子,具体实现代码如下:...
  • catshitone
  • catshitone
  • 2014年10月08日 17:32
  • 2464

vs2013 窗体应用编程—控件大小随窗体变化(通过代码实现)

在form.cs:添加变量记录窗体大小,每次窗体大小变化时记录放缩比并且更改大小数据(通过窗体的Resize事件触发),对于控件则是同控件标签Tag来记录大小并且控制变化。具体代码如下: namesp...
  • emoheithree
  • emoheithree
  • 2016年04月11日 23:15
  • 813

VS2013/MFC编程入门之二十八(常用控件:列表视图控件List Control 下)

上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义。本节继续讲解下半部分,包括列表视图控件的创建、CListCtrl类的主要成员函数...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年12月03日 10:47
  • 2852

C# winform 窗体控件随窗体大小改变

http://www.cnblogs.com/jason-liu-blogs/archive/2012/10/28/2743243.html private void setTag(C...
  • junjian8811
  • junjian8811
  • 2016年06月08日 09:54
  • 1549

c#实现窗体大小改变时,控件大小也跟着改变,实现窗体拉伸重绘

public partial class Form1 : Form { float xvalues; float yvalues; public...
  • qywl2014
  • qywl2014
  • 2017年09月15日 16:06
  • 344

MFC/VC++/VS 控件随对话框尺寸变化

1. 获取对话框尺寸 CRect m_rect; //用于保存原对话框大小 GetClientRect(&m_rect); //获取对话框的大小 2. OnSize 消息 if (m...
  • z444_579
  • z444_579
  • 2016年09月22日 13:53
  • 603

C++ MFC / VS2013 之十八(常用控件:静态文本框)

静态文本框      上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了。从本节开始将讲解各种常用控件的用法。常用控件主要包括:静态文本框、编辑框、单选按钮、复选框、分组...
  • wgf5845201314
  • wgf5845201314
  • 2017年10月08日 20:00
  • 303
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vs2013 窗体应用编程—控件大小随窗体变化(通过代码实现)
举报原因:
原因补充:

(最多只允许输入30个字)