欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-11-22 18:33:02
实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录,然后根据窗体改变的大小同时放缩。 简要步骤如下: 1、创建c#窗体程序项目。...

实现方式主要是利用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#实现窗体中的各个控件同比自动放缩大小