zoukankan      html  css  js  c++  java
  • Winform 窗体控件+字体自适应屏幕大小

    AutoSizeFormClass类:

    public class AutoSizeFormClass
        {
            /// <summary>
            /// 声明结构 记录控件位置和大小
            /// </summary>
            public struct ControlRect
            {
                public int Left;
                public int Top;
                public int Width;
                public int Height;
                public float Size;
            }
    
            public List<ControlRect> _oldCtrl = new List<ControlRect>();
            private int _ctrlNo = 0;
    
            private void AddControl(Control ctrl)
            {
                foreach (Control c in ctrl.Controls)
                {
                    ControlRect cR;
                    cR.Left = c.Left;
                    cR.Top = c.Top;
                    cR.Width = c.Width;
                    cR.Height = c.Height;
                    cR.Size = c.Font.Size;
                    _oldCtrl.Add(cR);
                    // 控件可能嵌套子控件
                    if (c.Controls.Count > 0)
                        AddControl(c);
                }
            }
    
            public void ControlAutoSize(Control mForm)
            {
                if (_ctrlNo == 0)
                {
                    ControlRect cR;
                    cR.Left = mForm.Left;
                    cR.Top = mForm.Top;
                    cR.Width = mForm.Width;
                    cR.Height = mForm.Height;
                    cR.Size = mForm.Font.Size;
                    _oldCtrl.Add(cR);
    
                    AddControl(mForm);
                }
    
                _ctrlNo = 1;
                float wScale = (float)mForm.Width / _oldCtrl[0].Width;
                float hScale = (float)mForm.Height / _oldCtrl[0].Height;
                AutoScaleControl(mForm, wScale, hScale);
            }
    
            private void AutoScaleControl(Control mForm, float wScale, float hScale)
            {
                int ctrlLeft, ctrlTop, ctrlWidth, ctrlHeight;
                float ctrlFontSize, hSize, wSize;
                foreach (Control c in mForm.Controls)
                {
                    ctrlLeft = _oldCtrl[_ctrlNo].Left;
                    ctrlTop = _oldCtrl[_ctrlNo].Top;
                    ctrlWidth = _oldCtrl[_ctrlNo].Width;
                    ctrlHeight = _oldCtrl[_ctrlNo].Height;
                    ctrlFontSize = _oldCtrl[_ctrlNo].Size;
    
                    c.Left = (int)Math.Ceiling(ctrlLeft * wScale);
                    c.Top = (int)Math.Ceiling(ctrlTop * hScale);
                    c.Width = (int)Math.Ceiling(ctrlWidth * wScale);
                    c.Height = (int)Math.Ceiling(ctrlHeight * hScale);
    
                    wSize = ctrlFontSize * wScale;
                    hSize = ctrlFontSize * hScale;                
                    c.Font = new Font(c.Font.Name, Math.Min(hSize, wSize), c.Font.Style, c.Font.Unit);
    
                    _ctrlNo++;
    
                    // 先缩放控件本身 再缩放子控件
                    if (c.Controls.Count > 0)
                    {
                        AutoScaleControl(c, wScale, hScale);
                    }
                }
            }
        }

    MainFrom中添加:

            AutoSizeFormClass asc = new AutoSizeFormClass();        
    
            private void MainForm_SizeChanged(object sender, EventArgs e)
            {
                asc.ControlAutoSize(this);
            }
  • 相关阅读:
    jquery表格伸展
    jquery单选框 复选框表格高亮 选中
    jquery表单验证
    jquery下拉框实现将左边的选项添加到右边区域
    jquery checkbox选中状态
    关于.net页面提交后css样式不生效的发现
    asp.net页面后退,重复弹出上一页对话框处理办法
    这几天做完简易酒店管理系统,对Sql Server执行计划的浅显了解
    温故而知新--sql存储过程复习
    网站前端性能优化之javascript和css
  • 原文地址:https://www.cnblogs.com/zhengzc/p/8966102.html
Copyright © 2011-2022 走看看