如何让Mono使用Winforms显示标签的多行?

时间:2018-04-25 15:01:13

标签: c# mono

我有一个在窗口上创建标签的方法。这种方法在.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();
}

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

在Windows上使用.net This is on Windows

在Linux上使用Mono(在RPi上) This is on the 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;

0 个答案:

没有答案