我有一个常规标签,TextAlign属性设置为MiddleCenter。该标签用于保存具有分钟和秒的时间值,并将用作秒表。
如果字体很小,标签会垂直对齐。但是,随着字体大小的增加,垂直对齐变得有问题......
在此处查看截图,您将看到我的意思:
screenshot http://s12.postimage.org/5c6f7ufgt/clock.png
据我所知,我认为.NET在技术上是正确的 - 我认为垂直对齐从印刷意义来看是正确的,因为字体上升和下降等。然而,在这种情况下,这并不符合我的需要。在屏幕截图中,标签的顶部比标签的底部具有更多的空间。当显示数字时,我希望这两个部分相等。我只使用数字和冒号,所以如果包含其他字符,例如“g”,显然会将像素悬挂在基线下方,我对它的外观不感兴趣。
我尝试调整填充以强制执行此行为但它只是导致文本被剪切而.NET不会让我使用负填充/边距。有没有简单的方法来完成我想要的东西?我还尝试手动编辑ttf字体文件并更改字体上升/下降,以便.NET以不同方式对齐但无法弄清楚。谢谢你的建议。
我使用的字体文件在这里下载: http://www.fontspace.com/style-7/digital-7
答案 0 :(得分:0)
看起来,如果比例很大,文字就会“下沉”,最终会被切断。
在Form ResizeEnd事件上尝试:
label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//First make the font big enough
double fontSize = label1.Width / label1.Text.Count();
int height = label1.Height;
fontSize = fontSize > 0 ? (double)fontSize : 1;
if (fontSize < (height / 2))
{
fontSize = (height / 2);
}
label1.Font = new System.Drawing.Font(label1.Font.FontFamily, (float)fontSize, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
//then adjust the text to the label size
while (label1.Width < System.Windows.Forms.TextRenderer.MeasureText(label1.Text,
new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Width ||
label1.Height < System.Windows.Forms.TextRenderer.MeasureText(label1.Text,
new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Height)
{
label1.Font = new Font(label1.Font.FontFamily, label1.Font.Size > 1 ? label1.Font.Size - 0.5f : label1.Font.Size, label1.Font.Style);
if (label1.ClientRectangle.Width < 3 || label1.ClientRectangle.Height < 3)
break;
}