我有AutoSize = false
和AutoEllipsis = true
的标签,我注意到如果将省略号添加到此标签的文本中,它会移动几个像素,如下面的屏幕截图所示:
为什么呢?我究竟做错了什么?我该如何解决?
提前致谢。
答案 0 :(得分:1)
解决此问题的最简单方法是将标签的UseCompatibleTextRendering属性设置为True。
答案 1 :(得分:1)
这似乎是bug。
每当文本太大时,它与顶部对齐,使用(2)或不使用(1)AutoEllipsis
。
不幸的是,提出的解决方案通常看起来很丑陋。
要解决方法(3),您可以使用类似下面的简单函数,也可以编写一个集成了函数的Label
子类。:
string ReducedText(Label lbl, string text)
{
char ell = (char)0x00002026;
lbl.Tag = text;
string redString = text;
using (Font font = new Font(lbl.Font, FontStyle.Bold))
using (Graphics G = lbl.CreateGraphics())
{
G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
float elltWidth = TextRenderer.MeasureText(G, ell.ToString(), font).Width;
float textWidth = TextRenderer.MeasureText(G, redString, font).Width;
elltWidth += lbl.Padding.Left + lbl.Padding.Right ;
if (textWidth < lbl.ClientSize.Width) return text; // maybe watch padding!
SizeF s = SizeF.Empty;
do
{
redString = redString.Substring(0, redString.Length - 1);
s = TextRenderer.MeasureText(G, redString, font);
// Console.WriteLine(s.Width + " " + lbl.ClientSize.Width + " " + redString);
} while (s.Width + elltWidth > lbl.ClientSize.Width);
}
return redString + ell;
}
在一些粗体字体上,省略号字符看起来像下划线;在这种情况下,只需用2-3点的字符串替换它。!
答案 2 :(得分:0)
将标签的margin属性的顶部和底部设置为3似乎对我来说是可行的。因此,将您的边距设置为(3,3,3,3)!