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要么会将原本的一个表格分割显示在两个页面,或 ...
随机推荐
- maven surefire plugin介绍
示例 <!-- 测试运行器,生成测试报告 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- Eclipse的Java Working set
1. 在 java perspective 点击 package explorer 的 倒三角 ,选择 Configurate Working Sets 新建Working Sets 或者 在 pac ...
- Mysql 日志文件类型
简介: Mysql 中提供了多种类型的日志文件,分别反映 Mysql 的不同信息,了解它们很有必要. 1.Error log ( 错误日志 ) 错误日志记录了 Mysql Server 运行过程中所有 ...
- ROS解决网页断流现象 (转)
“pppoe-client”接口,将“MAX MTU”和“MAX MRU”都设置成“” /ip firewall mangle add action=change-mss chain=forward ...
- NSTimer类的使用
转载于:http://www.cnblogs.com/wujian1360/archive/2011/09/05/2167992.html 创建一个 Timer + scheduledTimerWit ...
- 漂亮的表格样式–>使用CSS样式表控制表格样式
依照WEB2.0风格,设计了几个表格样式,希望大家喜欢.WEB2.0提倡使用div开布局,但不是要完全放弃使用表格,表格在数据展现方面还是不错的选择.现在介绍使用CSS样式表来控制.美化表格的方法. ...
- 刷题向》一道简单的思路题BZOJ1800(EASY+)
这道题其实并不难,主要原因是数据范围很小,当然数据如果大来也可以优化,但重点是在做的时候用的思路很通用, 所以本题是一道思想题(当然思想也不难) 标题里的“+”体现在一些边界处理中. 直接甩题目 De ...
- 微信小程序文档里看不到的小Tips
前几天折腾了下.然后列出一些实验结果,供大家参考. 0. 使用开发工具模拟的和真机差异还是比较大的.也建议大家还是真机调试比较靠谱. 1. WXML(HTML) 1.1 小程序的WXML没有HTML的 ...
- 小程序本地资源无法通过 css 获取
background-image:可以使用网络图片,或者 base64,或者使用<image/>标签
- 使用Qt Installer Framework制作软件安装包
概述 Qt Installer Framework(缩写QIF)是Qt官方用于生成软件安装包的工具.包括Qt Creator和Qt Installer Framework自身的安装包都是由这个工具制作 ...