zoukankan      html  css  js  c++  java
  • 字体大小自动随宽度和内容改变

    字体的大小设定可以在开始的时候指定.但是有时候需要根据窗口或者文字的长短来指定.那么这个时候就需要用到时间Paint了. 继承与Control的控件都有这个事件.也可以override OnPaint函数. 主要考虑两个因素,宽度和高度.比方如果字体的长度小于一个比例,则增加字体大小.如果大于一个比例则减小字体.

    高度也是同样的道理.控制在一个比例范围以内就可以了

    /// <summary>
            /// 标题重绘时候的处理
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void txtTitle_Paint(object sender, PaintEventArgs e)
            {
                var lbl = sender as Label;
                if (lbl == null)
                {
                    return;
                }
                var size = MeasureStringWidth(lbl.Text, e.Graphics, lbl.Font);
                float diff = size.Width / lbl.Width;
                var font = lbl.Font;
                while ((diff > 0.6 || diff < 0.4))
                {
    
                    font = new Font(font.Name, diff > 0.5 ? font.Size - 1 : font.Size + 1, font.Style);
                    size = MeasureStringWidth(lbl.Text, e.Graphics, font);
                    if (size.Height > lbl.Height)
                    {
                        font = new Font(font.Name, diff > 0.5 ? font.Size + 1 : font.Size - 1, lbl.Font.Style);
                        break;
                    }
                    if (font.Size < 5)
                    {
                        break;
                    }
                    diff = size.Width / lbl.Width;
                }
                lbl.Font = font;
            }
            /// <summary>
            /// 获得文字的高宽
            /// </summary>
            /// <param name="text">文字内容</param>
            /// <param name="graphic">绘画</param>
            /// <param name="font">字体</param>
            /// <returns>大小</returns>
            public static SizeF MeasureStringWidth(string text, Graphics graphic, Font font)
            {
                SizeF tmpSize = System.Windows.Forms.TextRenderer.MeasureText(text, font);
                return tmpSize;
            }
  • 相关阅读:
    Python格式化输出%s和%d
    操作数据库
    协议类介绍
    并发和并行和压测 、对带宽的理解解释
    悠悠大神的 并发当前目录下所有文件的方法(还没试过)
    post参数的方法 json data 和特别的传参
    接口测试简介
    appium的三种等待方式 (还没实践过,记录在此)
    人生进步目标
    保持一个会话 添加 HTTP Cookie管理器
  • 原文地址:https://www.cnblogs.com/zeroone/p/3296820.html
Copyright © 2011-2022 走看看