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

C# 如何使用Winforms使Mono显示标签的多行?,c#,mono,C#,Mono,我有一个在窗口上创建标签的方法。此方法在.Net下的Windows中运行良好,但当我使用mono在我的RPi上运行它时,只显示一行 是否有任何特定于mono的代码可以用来强制mono显示标签上的所有文本 private void ShowMessageRight(string strMessage, Color backColor, Color foreColor, Single fontSize = 24f) { if (_lblMessageRight == null) {

我有一个在窗口上创建标签的方法。此方法在.Net下的Windows中运行良好,但当我使用mono在我的RPi上运行它时,只显示一行

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

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

在使用Mono的Linux上(在RPi上)

编辑:

所以我尝试使用TextRenderer.MeasureText这似乎有效,但我很困惑为什么。TextRenderer.MeasureText有时会返回一个小于500的宽度,如果我知道字符串比这个宽度长。它将返回字体高度的两倍。如果使用该值作为标签高度,则会得到两行。text renderer.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;

\u lblMessageRight.MaximumSize=新尺寸(500,0)?为什么是0?据我所知,0意味着无限。所以它可以在垂直方向上无限大。这可能隐含着在.NET中的意思,但Mono对“规则”有更严格的遵守,并且可能不会采取这种自由。我会试着把它调大一些,看看它在单声道中是否有效。@Ron Beyer:把它调大到100、200、300没有任何变化。将其设置为500会使应用程序在加载索引超出范围异常时崩溃。我用当前状态更新了我的问题。