博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#自定义控件实现控件随窗口大小改变
阅读量:7222 次
发布时间:2019-06-29

本文共 2064 字,大约阅读时间需要 6 分钟。

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

2.将默认的UserControl改成Form

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窗口,继承自定义控件

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

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

转载于:https://www.cnblogs.com/wocaca/p/3275902.html

你可能感兴趣的文章
Fedora 17 LibreOffice 办公套件的安装与汉化
查看>>
scrollview不充满屏幕的原因
查看>>
PHP单例模式
查看>>
解密敏捷自动化测试
查看>>
DelphiMVC拦截器介绍
查看>>
Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
查看>>
iOS 11正式版终于来了!强力助攻小程序
查看>>
开放平台API接口调用频率控制系统设计浅谈
查看>>
Lucene4.3进阶开发之潜龙勿用( 七)
查看>>
DTD和schema小总结
查看>>
去掉导航栏的黑线
查看>>
怎样让html加载完毕后加载js代码
查看>>
piwik 案例介绍
查看>>
敏感字过滤
查看>>
为什么我们要从 NodeJS 迁移到 Ruby on Rails
查看>>
Android 文件式数据库Realm
查看>>
Linux 面试知识点笔记
查看>>
论flex布局和box布局的华为meta8手机自带浏览器的兼容
查看>>
dubbo与springcloud初识
查看>>
iis web.config 配置示例
查看>>