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#实现窗体中的各个控件同比自动放缩大小 的全部内容, 来源链接: utcz.com/z/343081.html

回到顶部