c# - 如何让 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();
}
对方法的相同调用的结果。
编辑:
所以我尝试使用 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;
解决方案
推荐阅读
- python-3.x - 在 gremlin 中查找连接图 DB 边的最小和最大长度
- php - array_flip,但不会丢失重复的键
- ios - AFnetworking:错误代码 500:无法读取数据,因为它的格式不正确
- c# - 如何避免在表示层使用数据访问层?
- typescript - 在 Angular 5 中对标记、圆形和多边形图层进行分组
- bash - Shell 脚本部分采购功能
- jquery - 我们可以在 jquery 的数组中获取活动按钮吗?
- java - Android Studio 中的半空格或半空格
- java - listview javafx中的多个标签和图像
- c++ - QTableview 在一段时间后变为空白