public Label changeLabelFont(Label label)
{
FontStyle fontStyle = FontStyle.Regular;
System.Drawing.FontFamily ff = new System.Drawing.FontFamily(label.Font.Name);
float size = 12F;
string content = label.Text;
//初始化label状态
label.Font = new Font(ff, size, fontStyle, GraphicsUnit.Point);
while (true)
{
//获取当前一行能放多少个字======================================================
//1、获取label宽度
int labelwidth = label.Width;
//2、获取当前字体宽度
Graphics gh = label.CreateGraphics();
SizeF sf = gh.MeasureString("0", label.Font);
float fontwidth = sf.Width;
//3、得到一行放几个字
int OneRowFontNum = (int)((double)labelwidth / (double)fontwidth);
//判断当前的Label能放多少列======================================================
//1、获取当前字体的高度
float fontheight = sf.Height;
//2、获取当前label的高度
int labelheight = label.Height;
//3、得到当前label能放多少列
int ColNum = (int)((double)labelheight / (double)fontheight);
//获取当前字符串需要放多少列======================================================
var NeedColNum = Math.Ceiling((double)content.Length / (double)OneRowFontNum);
//如果超出范围,则缩小字体,然后返回再判断一次===================================
if (ColNum < NeedColNum)
{
size -= 0.25F;
label.Font = new Font(ff, size, fontStyle, GraphicsUnit.Point);
}
else
{
break;
}
}
return label;
}
注:存在个问题,就是MeasureString这个方法获取的字体不太准确,我更改了好几种字体的GraphicsUnit类型,要么是宽度不准,要么是高度不准,所以这个方法还是有点不完美,label内字体不能全部铺满到极限再进行缩小字体的操作。