10

我有一个带有更改文本的标签,我希望它是固定长度的单行。每当文本长于标签长度时,我希望它在末尾显示适合“...”的任何内容。例如:

Some Very Long Text

看起来像:

Some Very Lon...

有谁知道这是怎么做到的吗?

4

2 回答 2

16

选项之一是将Label.AutoEllipsis设置为 true。

将 AutoEllipsis 设置为 true 以在用户使用鼠标经过控件时显示超出标签宽度的文本。如果 AutoSize 为 true,则标签将增大以适合文本,并且不会出现省略号。

所以,你需要设置AutoSize为false。省略号的外观取决于标签的固定宽度。AFAIK,您需要手动处理文本更改以使其取决于文本长度。

于 2013-03-11T11:47:41.003 回答
6

我的解决方案:

    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;
}
于 2013-03-13T12:44:42.773 回答