当前位置: 移动技术网 > IT编程>数据库>MongoDB > C#实现窗体中的各个控件同比自动放缩大小

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网