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. spring-boot-starter-security Spring Boot中集成Spring Security

    spring security是springboot支持的权限控制系统. security.basic.authorize-mode 要使用权限控制模式. security.basic.enabled ...

  2. Shiro学习之路 -- 架构及其组件

    出自:跟我学shiro 简介 Apache Shiro 是 Java 的一个安全框架.目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 ...

  3. rails 网站跨域

    7down voteaccepted gem install rack-cors Or in your Gemfile: gem 'rack-cors', :require => 'rack/c ...

  4. ubuntu linux常用指令(1)

    序号 命令 说明 1 sudo su 从普通用户切换到root用户 2 su user 从root用户切换到普通用户 3 ls 列出当前目录的文件和目录,但是不包括隐藏文件和目录 4 ls -a 列出 ...

  5. apktool.bat

    @echo off if "%PATH_BASE%" == "" set PATH_BASE=%PATH% set PATH=%CD%;%PATH_BASE%; ...

  6. guestfs-python 手册

    Help on module guestfs: NAME guestfs - Python bindings for libguestfs FILE /usr/lib64/python2.7/site ...

  7. Nginx源码完全注释(9)nginx.c: ngx_get_options

    本文分析 ngxin.c 中的 ngx_get_options 函数,其影响: nginx.c 中的: static ngx_uint_t ngx_show_help; static ngx_uint ...

  8. selenium+jenkins网页自动化测试的构建

    jenkins+selenium可以做到对web自动化的持续集成. Jenkins的基本操作: 一.新建视图及job 新建视图: 新建job: 可以选择构建一个自由风格的软件项目或者复制已有的item ...

  9. Opencv HOG特征检测

    HOGDescriptor hogDescriptor = HOGDescriptor(); hogDescriptor.setSVMDetector(hogDescriptor.getDefault ...

  10. adf错误

    1>无法验证事务处理中的所有行 运行项目报错: javax.faces.el.EvaluationException: oracle.jbo.TxnValException: JBO-27023 ...