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

来源:互联网 发布:翼龙贷java 待遇 编辑:程序博客网 时间:2024/06/08 07:25

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

        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[] { ':' });                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)        {           // throw new Exception("The method or operation is not implemented.");            float  newx = (this.Width )/ X;          //  float newy = (this.Height - this.statusStrip1.Height) / (Y - y);            float newy = this.Height / Y;            setControls(newx, newy, this);            //this.Text = this.Width.ToString() +" "+ this.Height.ToString();        }


然后在你窗体的构造函数InitializeComponent();下面添加: 

            this.Resize += new EventHandler(Form1_Resize);             X = this.Width;             Y = this.Height;             y = this.statusStrip1.Height;             setTag (this);

当然定义了两个全局变量,private float X; private float Y;

细心的你一定会发现还有个y ;这是因为如果有statusStrip1之类的控件,这是就一定要注意,窗体的实际宽度和高度一定要减去statusStrip1之类.

如果是容器,最好将Anchor和Dock属性也修改过来.

效果还不错.


原帖地址:http://blog.csdn.net/baihe_591/article/details/2495097

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 阴茎勃起的时间不长怎么办 睡觉的时间不长怎么办 每次锻炼时间不长怎么办 微信好友不知道是谁怎么办 就一个软件闪退怎么办 葫芦侠修改闪退怎么办 戴尔游匣磁盘占用100怎么办 步步高家教机扫描笔不亮怎么办 社保卡手机号换了怎么办 香港公司进出口没有申报怎么办 智能电视右上角网络未连接怎么办 电子秤按键板不好用怎么办失灵 桑塔纳车钥匙锁车里了怎么办 舌头上有锯齿印怎么办 夏天有脚气脚臭怎么办 xp分辨率太高黑屏怎么办 农村淘宝标识类目没了怎么办 被投诉到食品监督局怎么办 被客户315投诉了怎么办 给人打不接受调解怎么办 失业证年审忘了怎么办 工商年检过期4天怎么办 个体营业执照年审过期了怎么办 企业年报密码忘了怎么办 税务年报报错了怎么办 工商证过期5年怎么办 车年检标志丢了怎么办 年检标志打错了怎么办 贵州个体出租车工商执照年检怎么办 驾驶证考试预约提示网络繁忙怎么办 帝豪显示屏花屏怎么办 注册公司居委会不盖章怎么办 营业执照名字和店名不一样怎么办 开炸鸡店没经验怎么办 提名候选人时重名重姓怎么办 别人用我的店名怎么办 wish店铺出现侵权产品怎么办 如果公司缺人该怎么办 鲁班奖证书丢了怎么办 个人注册服务号没有营业执照怎么办 社保过了缴费日怎么办