【问题标题】:Override/Change .NET Winforms Font Vertical Alignment Behavior for Label Control覆盖/更改标签控件的 .NET Winforms 字体垂直对齐行为
【发布时间】:2012-09-27 12:09:02
【问题描述】:

我有一个 TextAlign 属性设置为 MiddleCenter 的常规标签。该标签旨在保存包含分钟和秒的时间值,并将用作秒表。

如果字体较小,则标签垂直对齐正确。然而,随着字体大小的增加,垂直对齐变得有问题......

在此处查看屏幕截图,您将明白我的意思:

据我所知,我认为 .NET 在技术上是正确的——我认为垂直对齐从印刷意义上来说是正确的,因为字体上升和下降之类的东西。但是,在这种情况下,这并不真正适合我的需求。在屏幕截图中,标签的顶部比标签的底部有更多的空间。我希望这两个部分在显示数字时相等。我只使用数字和冒号,所以我不关心如果包含其他字符(例如“g”,它显然会使像素悬在基线下方。

我尝试调整填充以强制执行此行为,但这只是导致文本被剪裁,并且 .NET 不允许我使用负填充/边距。有什么简单的方法可以在这里完成我想要的吗?我还尝试手动编辑 ttf 字体文件并更改字体上升/下降,以便 .NET 以不同方式对齐它,但无法弄清楚。谢谢你的建议。

我使用的字体文件在这里下载: http://www.fontspace.com/style-7/digital-7

【问题讨论】:

  • 只需使用控件的 Paint 事件处理程序自己绘制字符串。

标签: c# winforms fonts label vertical-alignment


【解决方案1】:

如果比例过大,文本会“下沉”并最终被截断。

在 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;
    }

我修改了这个:https://stackoverflow.com/a/9645577/1027551

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多