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

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

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

实现方式主要是利用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、效果测试

总结

以上是内存溢出为你收集整理的C#实现窗体中的各个控件同比自动放缩大小全部内容,希望文章能够帮你解决C#实现窗体中的各个控件同比自动放缩大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1255387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存