我有一个在窗口上创建标签的方法。这种方法在.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();
}
对方法的相同调用的结果。
编辑:
所以我尝试使用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;