C# Winform Label内容根据其宽度自动调整字体大小

项目,有个要求,Label中显示的内容,能够根据其宽度自动调整字体的大小进行显示,刚刚开始的时候,总是想着通过不同的方法来直接测量内容的显示宽度,但是不同的字体,中英文,粗体斜体等众多因数,都影响内容的显示长度,直到后来想到间接的方法,通过修改Label的AutoSize属性,再改变字体的大小,Label的宽度就是整个内容的显示长度。有时候,思考的方式稍微转换一下,问题可能就变得简单。下面是调试时的demo程序,特此记录一下,提醒自己,思考的方式很重要。

简单的界面如下图所示:

代码如下:

 using System;
using System.Drawing;
using System.Windows.Forms; namespace Johar.AutoSizrLabel
{
public partial class Form1 : Form
{
private readonly FontStyle fontStyle = FontStyle.Regular;
private readonly float fontSize = ;
private readonly int lblWidth = ;
public Form1()
{
InitializeComponent();
lblWidth = this.lblDisplay.Width;
fontSize = this.lblDisplay.Font.Size;
fontStyle = this.lblDisplay.Font.Style;
} private void btnOK_Click(object sender, EventArgs e)
{
string content = this.txtInput.Text.Trim();
FontFamily ff = new FontFamily(this.lblDisplay.Font.Name);
this.lblDisplay.Font = new Font(ff, fontSize, fontStyle, GraphicsUnit.World);
float size = this.lblDisplay.Font.Size; /*
* 方法1:利用字体的宽度和字符串的长度相乘,大概算出整体字符串的实际长度
* (当然利用正则表达式区分中英文,计算出来的更加准确),再和Label的实际宽度
* 相比较,如果其大于Label的宽度,则减小当前字体的大小,直到字符串长度小于
* Label的宽度。
* 缺点:计算不准确,特别是字体为粗体,同时为了区别中英文,还要用正则表达式
* 比较麻烦。
*/
while (content.Length * size > lblWidth)
{
size -= 0.25F;
}
this.lblDisplay.Font = new Font(ff, fontSize, fontStyle, GraphicsUnit.World);
this.lblDisplay.Text = content; /*
* 方法2:大体的思路和方法1相同,只是在测量字符串显示的宽度时,使用了自带的函数
* MeasureString
* 优缺点:虽然可以准确测量字符串的显示长度,但是字体缩小后会显示称多行
*/
Graphics gh = this.CreateGraphics();
SizeF sf = gh.MeasureString(content, this.lblDisplay.Font);
while (sf.Width > lblWidth)
{
size -= 0.25F;
this.lblDisplay.Font = new Font(ff, size, fontStyle, GraphicsUnit.World);
sf = gh.MeasureString(content, this.lblDisplay.Font);
}
this.lblDisplay.Text = content; /*
* 方法3:大体思路和方法1相同,只是采用的测量字符串显示的宽度时,偷懒了,先将Label的
* AutoSize属性置为true,再改变其字体大小,使其宽度小于等于原来的宽度后显示出来,并
* 恢复原来的设置。
* 优缺点:可以准确的测量字符串的显示长度,同时可以保证只会显示一行
*/
this.lblDisplay.AutoSize = true;
this.lblDisplay.Text = content;
while (this.lblDisplay.Width > lblWidth)
{
size -= 0.25F;
this.lblDisplay.Font = new Font(ff, size, fontStyle, GraphicsUnit.World);
}
this.lblDisplay.AutoSize = false;
this.lblDisplay.Width = lblWidth;
}
}
}

C# Winform Label内容根据其宽度自动调整字体大小的更多相关文章

  1. android开发 textview根据字数长度自动调整字体大小

    需求:根据输入的值实时显示到textview中预览,但是字体大小是要自动适配的 网上有一个代码,但是在我这里不能用,注意方法:refitText  注释掉的是之前的代码 import com.cars ...

  2. Android 根据屏幕分辨率自动调整字体大小

    1.在oncreate 里获取手机屏幕宽和高度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...

  3. 设置一个label显示多种颜色,多种字体大小

    UILabel* label = [[UILabel alloc] init]; label.frame = CGRectMake(0, 100, 200, 100); label.textColor ...

  4. 怎么限制Google自动调整字体大小

    Google默认的字体大小是12px,当样式表中font-size<12px时,或者没有明确指定字体大小,则在chrome浏览器里字体显示是12px. 最近在写代码玩的时候,我也碰到了 在FF和 ...

  5. vue中使用elementUI中表格的v宽度,字体大小

    <el-table :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" style=&q ...

  6. echarts pie 图表 显示的label 中内容 字体大小自定义

    option = { tooltip: { trigger: 'item', formatter: "{a} <br/>{b}: {c} ({d}%)" }, lege ...

  7. jquery库实现iframe自适应内容高度和宽度

    javascript原生和jquery库实现iframe自适应内容高度和宽度---推荐使用jQuery的代码! ‍<iframe src="index.php" id=&qu ...

  8. css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙

    css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙 5 样式 .ceshi{float:left; margin-left:13px; width:180px; ...

  9. C# 将Excel转为PDF时设置内容适应页面宽度

    将Excel转为PDF格式时,通常情况下转换出来的PDF页面都是默认的宽度大小:如果Excel表格数据的设计或布局比较宽或者数据内较少的情况,转出来的PDF要么会将原本的一个表格分割显示在两个页面,或 ...

随机推荐

  1. win7 wifi

    win7 wifi the settings saved on this computer for the network do not match the requirements of the n ...

  2. Spring -- <context:component-scan>使用说明

    在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类 ...

  3. VS2013 查看程序各个函数的CPU利用率<转>

    自己写的程序CPU占用率过高,无法锁定原因时,可以用VS2013帮忙检测 1. 打开VS 性能分析 2. 启动项目进行检测 3. 选择CPU采样 完成 4. 分析一段时间 然后停止分析 5. 选择显示 ...

  4. 【转】arm和x86的区别

    来自: https://blog.csdn.net/u012513972/article/details/78349192/ 信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是 ...

  5. WOW研究资料收集

    1,模拟服务器:trinity core, sunwell core等 参考:逍遥魔兽 2,大芒果:通用网游框架,带了WOW的模拟模块 参考资料: 大芒果论坛http://www.mangoscn.c ...

  6. JSTL中EL表达式无法直接取size的处理

    jsp中使用${list.size }会编译成list.getSize()方法,并不能获取list的长度,因为程序回去找List对象中的getSize()方法,所以只能想别的办法, 一种方法是在后台程 ...

  7. Python进程监控-MyProcMonitor

    psutil api文档: http://pythonhosted.org/psutil/ api 测试 #! /usr/bin/env python # coding=utf-8 import ps ...

  8. win 10+ iis 10 部署.net core 1.1 web api

    今天上午部署了wcf,部署了好久,一直没有部署好,最后找到了dudu的部署方法,结果中午吃饭的时候成功了,这是链接:http://www.cnblogs.com/dudu/p/3328066.html ...

  9. Gouraud Shading

    [Gouraud Shading] Gouraud Shading (高洛德着色/高氏着色) 这种着色的效果要好得多,也是在游戏中使用最广泛的一种着色方式.它可对3D模型各顶点的颜色进行平滑.融合处理 ...

  10. SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、yml属性配置、多环境配置、自定义properties配置

    1 IntelliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到 ...