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. maven surefire plugin介绍

    示例 <!-- 测试运行器,生成测试报告 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  2. Eclipse的Java Working set

    1. 在 java perspective 点击 package explorer 的 倒三角 ,选择 Configurate Working Sets 新建Working Sets 或者 在 pac ...

  3. Mysql 日志文件类型

    简介: Mysql 中提供了多种类型的日志文件,分别反映 Mysql 的不同信息,了解它们很有必要. 1.Error log ( 错误日志 ) 错误日志记录了 Mysql Server 运行过程中所有 ...

  4. ROS解决网页断流现象 (转)

    “pppoe-client”接口,将“MAX MTU”和“MAX MRU”都设置成“” /ip firewall mangle add action=change-mss chain=forward ...

  5. NSTimer类的使用

    转载于:http://www.cnblogs.com/wujian1360/archive/2011/09/05/2167992.html 创建一个 Timer + scheduledTimerWit ...

  6. 漂亮的表格样式–>使用CSS样式表控制表格样式

    依照WEB2.0风格,设计了几个表格样式,希望大家喜欢.WEB2.0提倡使用div开布局,但不是要完全放弃使用表格,表格在数据展现方面还是不错的选择.现在介绍使用CSS样式表来控制.美化表格的方法. ...

  7. 刷题向》一道简单的思路题BZOJ1800(EASY+)

    这道题其实并不难,主要原因是数据范围很小,当然数据如果大来也可以优化,但重点是在做的时候用的思路很通用, 所以本题是一道思想题(当然思想也不难) 标题里的“+”体现在一些边界处理中. 直接甩题目 De ...

  8. 微信小程序文档里看不到的小Tips

    前几天折腾了下.然后列出一些实验结果,供大家参考. 0. 使用开发工具模拟的和真机差异还是比较大的.也建议大家还是真机调试比较靠谱. 1. WXML(HTML) 1.1 小程序的WXML没有HTML的 ...

  9. 小程序本地资源无法通过 css 获取

    background-image:可以使用网络图片,或者 base64,或者使用<image/>标签

  10. 使用Qt Installer Framework制作软件安装包

    概述 Qt Installer Framework(缩写QIF)是Qt官方用于生成软件安装包的工具.包括Qt Creator和Qt Installer Framework自身的安装包都是由这个工具制作 ...