C# Winform Label内容根据其宽度自动调整字体大小
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内容根据其宽度自动调整字体大小的更多相关文章
- android开发 textview根据字数长度自动调整字体大小
需求:根据输入的值实时显示到textview中预览,但是字体大小是要自动适配的 网上有一个代码,但是在我这里不能用,注意方法:refitText 注释掉的是之前的代码 import com.cars ...
- Android 根据屏幕分辨率自动调整字体大小
1.在oncreate 里获取手机屏幕宽和高度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...
- 设置一个label显示多种颜色,多种字体大小
UILabel* label = [[UILabel alloc] init]; label.frame = CGRectMake(0, 100, 200, 100); label.textColor ...
- 怎么限制Google自动调整字体大小
Google默认的字体大小是12px,当样式表中font-size<12px时,或者没有明确指定字体大小,则在chrome浏览器里字体显示是12px. 最近在写代码玩的时候,我也碰到了 在FF和 ...
- vue中使用elementUI中表格的v宽度,字体大小
<el-table :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" style=&q ...
- echarts pie 图表 显示的label 中内容 字体大小自定义
option = { tooltip: { trigger: 'item', formatter: "{a} <br/>{b}: {c} ({d}%)" }, lege ...
- jquery库实现iframe自适应内容高度和宽度
javascript原生和jquery库实现iframe自适应内容高度和宽度---推荐使用jQuery的代码! <iframe src="index.php" id=&qu ...
- css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙
css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙 5 样式 .ceshi{float:left; margin-left:13px; width:180px; ...
- C# 将Excel转为PDF时设置内容适应页面宽度
将Excel转为PDF格式时,通常情况下转换出来的PDF页面都是默认的宽度大小:如果Excel表格数据的设计或布局比较宽或者数据内较少的情况,转出来的PDF要么会将原本的一个表格分割显示在两个页面,或 ...
随机推荐
- python算法之归并排序
归并排序 归并排序是采用分治法的一个非常典型的应用.归并排序的思想就是先递归分解数组,再合并数组. 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相 ...
- Elasticsearch-2.4.3的单节点安装(多种方式图文详解)
前提: Elasticsearch-2.4.3的下载(图文详解) 1.新建es安装目录 [root@djt002 local]# mkdir elasticsearch [root@djt002 lo ...
- AutoMapper差异内容备份
公司就得项目用的automapper 是 4.2.1 当时用的方法是:Mapper.CreateMap<source,sourceDto>(); 在最新版 6.0.1 中,这些个方法被删除 ...
- 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(附Git地址)
本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...
- Delphi三层开发小技巧:TClientDataSet的Delta妙用
Delphi三层开发小技巧:TClientDataSet的Delta妙用 转载 2014年10月13日 09:41:14 标签: 三层 / ClientDataSet 318 from :http:/ ...
- 关于解决 请求被中止:无法建立SSL / TLS安全通道
我使用HttpWebRequest访问其他网站时,出现"请求被中止:无法建立 SSL / TLS安全通道"错误,于是goog和百度了一番,提供的答案基本 是:ServicePoin ...
- ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...
- UIPanel
[UIPanel] UIPanel is a component that collects and manages all widgets underneath it. UIPanel is res ...
- Lucene介绍及简单入门案例(集成ik分词器)
介绍 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和 ...
- 66. Plus One 数组加1
[抄题]: Given a non-negative integer represented as a non-empty array of digits, plus one to the integ ...