我有一个更改文字的标签,我希望它是一条固定长度的单行。每当文本比标签长度长时,我希望它在最后显示与“...”匹配的任何内容。例如:
Some Very Long Text
看起来像:
Some Very Lon...
有谁知道怎么做?
答案 0 :(得分:15)
其中一个选项是将Label.AutoEllipsis设置为true。
将AutoEllipsis设置为true,以便在用户使用鼠标移过控件时显示超出Label宽度的文本。如果AutoSize为true,则标签将增长以适合文本,并且不会显示省略号。
因此,您需要将AutoSize
设置为false。省略号外观取决于标签的固定宽度。 AFAIK,您需要手动处理文本更改以使其依赖于文本长度。
答案 1 :(得分:5)
我的解决方案:
myLabel.text = Trim(someText, myLabel.Font, myLabel.MaximumSize.Width);
public static string Trim(string text, System.Drawing.Font font, int maxSizeInPixels)
{
var trimmedText = text;
var graphics = (new System.Windows.Forms.Label()).CreateGraphics();
var currentSize = Convert.ToInt32(graphics.MeasureString(trimmedText, font).Width);
var ratio = Convert.ToDouble(maxSizeInPixels) / currentSize;
while (ratio < 1.0)
{
trimmedText = String.Concat(
trimmedText.Substring(0, Convert.ToInt32(trimmedText.Length * ratio) - 3),
"...");
currentSize = Convert.ToInt32(graphics.MeasureString(trimmedText, font).Width);
ratio = Convert.ToDouble(maxSizeInPixels) / currentSize;
}
return trimmedText;
}