Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使label控件截断带有省略号的长字符串?_.net_Winforms_Label - Fatal编程技术网

.net 如何使label控件截断带有省略号的长字符串?

.net 如何使label控件截断带有省略号的长字符串?,.net,winforms,label,.net,Winforms,Label,我有一个不断变化的文字标签,我希望它是一个固定长度的单行。每当文本比标签长度长时,我希望它在末尾显示任何与“…”匹配的内容。例如: 一些很长的文本 看起来像: 一些非常长的。。。 有人知道怎么做吗?选项之一是设置为true 将“自动省略号”设置为true,以在用户用鼠标通过控件时显示超出标签宽度的文本。如果“自动调整大小”为true,则标签将增长以适合文本,并且不会出现省略号 因此,您需要将AutoSize设置为false。省略号的外观取决于标签的固定宽度。好的,您需要手动处理文本更改,使其

我有一个不断变化的文字标签,我希望它是一个固定长度的单行。每当文本比标签长度长时,我希望它在末尾显示任何与“…”匹配的内容。例如:

一些很长的文本
看起来像:

一些非常长的。。。

有人知道怎么做吗?

选项之一是设置为true

将“自动省略号”设置为true,以在用户用鼠标通过控件时显示超出标签宽度的文本。如果“自动调整大小”为true,则标签将增长以适合文本,并且不会出现省略号

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

我的解决方案:

    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;
}
myLabel.text=Trim(someText,myLabel.Font,myLabel.MaximumSize.Width);
公共静态字符串修剪(字符串文本、System.Drawing.Font字体、int-maxSizeInPixels)
{
var trimmedText=文本;
var graphics=(new System.Windows.Forms.Label()).CreateGraphics();
var currentSize=Convert.ToInt32(graphics.MeasureString(trimmedText,font.Width));
var比率=Convert.ToDouble(maxSizeInPixels)/currentSize;
而(比率<1.0)
{
trimmedText=String.Concat(
trimmedText.子字符串(0,转换为32(trimmedText.Length*比率)-3),
"...");
currentSize=Convert.ToInt32(图形.MeasureString(trimmedText,字体).Width);
比率=Convert.ToDouble(maxSizeInPixels)/currentSize;
}
返回文本;
}

实际上,如果autosize设置为true的标签的增长受到其容器的限制(例如:tableLayoutPanel单元格中的标签),则该标签将显示省略号。此方法非常适合为my ToolStripLabel添加自动省略号类型的方法,默认情况下该方法不具有自动省略号功能。请注意,如果使用此方法。。。由于-3,子字符串将爆炸。根据字体大小和maxSizeInPixels,比率将收敛到1.0以下(并永远循环)。图形是一次性的。确保您使用的组件本身不能自动省略号。