首页 > 解决方案 > 如何让 Mono 在 Winforms 中显示多行标签?

问题描述

我有一种在窗口上创建标签的方法。这种方法在 .Net 下的 Windows 中运行良好,但是当我使用单声道在我的 RPi 上运行它时,只出现一行。

是否有任何单声道特定代码可以用来强制单声道显示标签上的所有文本?

private void ShowMessageRight(string strMessage, Color backColor, Color foreColor, Single fontSize = 24f)
{
    if (_lblMessageRight == null)
    {
        _lblMessageRight = new Label();
        this.Controls.Add(_lblMessageRight);
    }
    _lblMessageRight.Text = strMessage;
    _lblMessageRight.BackColor = backColor;
    _lblMessageRight.ForeColor = foreColor;
    _lblMessageRight.Font = new Font(new FontFamily("Microsoft Sans Serif"), fontSize, FontStyle.Bold);
    _lblMessageRight.TextAlign = ContentAlignment.MiddleCenter;
    _lblMessageRight.MaximumSize = new Size(500, 0);
    _lblMessageRight.AutoSize = true;
    _lblMessageRight.Left = (int)((this.ClientSize.Width * 0.75) - (_lblMessageRight.Width / 2));
    _lblMessageRight.Top = (this.ClientSize.Height - _lblMessageRight.Height) / 2;
    _lblMessageRight.BringToFront();
    _lblMessageRight.Show();
}

对方法的相同调用的结果。

在带有 .net 的 Windows 上 这是在 Windows 上

在带有 Mono 的 Linux 上(在 RPi 上) 这是在 RPi 上

编辑:

所以我尝试使用 TextRenderer.MeasureText 这似乎有效,但我很困惑为什么。当我知道字符串比那个长时,TextRenderer.MeasureText 有时会返回一个小于 500 的宽度。它将返回一个两倍于字体高度的高度。如果我使用该值作为标签高度,我会得到两行。TextRenderer.MeasureText 知道我想要标签的宽度有多神奇。

    Size SingleLineSize = TextRenderer.MeasureText(strMessage, _lblMessageLeft.Font, new Size(Int32.MaxValue, Int32.MaxValue));
    strMessage = SingleLineSize.Width + strMessage;
    int numberOfLines = (int)Math.Ceiling(SingleLineSize.Width / 500f);
    int lineHeight = SingleLineSize.Height;
    int height = numberOfLines * lineHeight;

标签: c#mono

解决方案


推荐阅读