C#实现窗体中的各个控件同比自动放缩大小

所属分类: 数据库 / MongoDB 阅读数: 126
收藏 0 赞 0 分享

实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录,然后根据窗体改变的大小同时放缩。

简要步骤如下:

1、创建C#窗体程序项目。
2、Panel放置到窗体。
3、设置属性dock为fill。
4、注意MinnumSize不能设置为0, 改成大于0都行。

复制代码 代码如下:

public partial class FrmDemo : Form 
    { 
        double dFrmWidth; 
        double dFrmHeight; 
        double dZoomHorizon; 
        double dZoomVerticality; 
        Dictionary<string, string> dicControlsAttribute = new Dictionary<string, string>(); 
 
        protected void GetAllInitiateContrlInfo(Control CrlContainer) 
        { 
            if (CrlContainer.Parent == this) 
            { 
                dFrmWidth = Convert.ToDouble(CrlContainer.Width); 
                dFrmHeight = Convert.ToDouble(CrlContainer.Height); 
            } 
            foreach (Control item in CrlContainer.Controls) 
            { 
                if (item.Name.Trim() != "") 
                    dicControlsAttribute.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2)  
                                             + "," + item.Width + "," + item.Height + "," + item.Font.Size); 
                if ((item as UserControl) == null && item.Controls.Count > 0) 
                    GetAllInitiateContrlInfo(item); 
            } 
        } 
 
        private void ChangeControlsInitiate(Control CrlContainer) 
        { 
            dZoomHorizon = (Convert.ToDouble(CrlContainer.Width) / dFrmWidth); 
            dZoomVerticality = (Convert.ToDouble(CrlContainer.Height) / dFrmHeight); 
        } 
         
        private void ChangeCurrentControlAttr(Control CrlContainer) 
        { 
            double[] dPosition = new double[5]; 
            foreach (Control item in CrlContainer.Controls) 
            { 
                if (item.Name.Trim() != "") 
                { 
                    if ((item as UserControl) == null && item.Controls.Count > 0) 
                        ChangeCurrentControlAttr(item); 
                    string[] strs = dicControlsAttribute[item.Name].Split(','); 
                    for (int j = 0; j < 5; j++) 
                    { 
                        dPosition[j] = Convert.ToDouble(strs[j]); 
                    } 
                    double itemWidth = dPosition[2] * dZoomHorizon; 
                    double itemHeight = dPosition[3] * dZoomVerticality; 
                    item.Left = Convert.ToInt32(dPosition[0] * dZoomHorizon - itemWidth / 2); 
                    item.Top = Convert.ToInt32(dPosition[1] * dZoomVerticality - itemHeight / 2); 
                    item.Width = Convert.ToInt32(itemWidth); 
                    item.Height = Convert.ToInt32(itemHeight); 
                    //item.Font = new Font(item.Font.Name, float.Parse 
                    //((dPosition[4] * Math.Min(dZoomHorizon, dZoomVerticality)).ToString())); 
                    //字体也可以实现同比放缩。 
                     } 
            } 
        } 
        protected override void OnSizeChanged(EventArgs e) 
        { 
            base.OnSizeChanged(e); 
            if (dicControlsAttribute.Count > 0) 
            { 
                ChangeControlsInitiate(this.Controls[0]); 
                ChangeCurrentControlAttr(this.Controls[0]); 
            } 
        }  
 
        public FrmDemo() 
        { 
            InitializeComponent(); 
            GetAllInitiateContrlInfo(this.Controls[0]);//构造函数里面调用即可。 
        } 
}

5、效果测试

更多精彩内容其他人还在看

MongoDB系列教程(一):NoSQL起源

这篇文章主要介绍了MongoDB系列教程(一):NoSQL起源,本文讲解了为什么出现NoSQL、NoSQL历史、SQL和NoSql的区别、NoSQL数据库类型等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(二):MongoDB简介

这篇文章主要介绍了MongoDB系列教程(二):MongoDB简介,本文讲解了MongoDB介绍、MongoDB功能特性、mongoDB数据架构等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(三):Windows中下载和安装MongoDB

这篇文章主要介绍了MongoDB系列教程(三):MongoDB下载和安装,本文讲解使用Windows环境安装MongoDB,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(四):设置用户访问权限

这篇文章主要介绍了MongoDB系列教程(四):设置用户访问权限,本文讲解了在Windows环境下如何创建用户认证,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(五):mongo语法和mysql语法对比学习

这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命令,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(六):java操作mongodb实例

这篇文章主要介绍了MongoDB系列教程(六):java操作mongodb实例,本文讲解了java中操作mongodb数据增加、删除、修改、查询数据等代码实例,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(七):MongoDb数据结构详解

这篇文章主要介绍了MongoDB系列教程(七):MongoDb数据结构详解,本文讲解了Collections、Document、GridFS等3种数据结构,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB系列教程(八):GridFS存储详解

这篇文章主要介绍了MongoDB系列教程(八):GridFS存储详解,本文讲解了什么是GridFS、GridFS的实现原理等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB数据库的特色和优点介绍

这篇文章主要介绍了MongoDB数据库的特色和优点介绍,本文总结了每个开发人员都应该知道的5个MongoDB特点,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB简介 MongoDB五大特色

这篇文章主要介绍了MongoDB简介,MongoDB五大特色,本文讲解了丰富的数据模型、容易扩展、丰富的功能、高性能、简便的管理等内容,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多