状态栏标签文本太长时不可见

18

我在一个C#窗体底部设置了一个StatusStrip,其中包含一个标签,在标签中的文本显示正常,但当文本长度较长时,则完全不显示,我必须扩大窗体大小,然后它才会突然出现。是否可能在以下形式中将其显示出来:

    This is a very long tex...

这样用户就知道应用正在显示某些内容,然后他可以自己扩大它,因为当它完全不可见时,对用户没有任何指示。


2
只需测量文本宽度并将其裁剪到状态标签的宽度,然后使用SubString() + "..."。 - Jeremy Thompson
你使用哪种版本的VS?我正在使用VS2015 Update 3,.NET 4.0,Win10,一切正常。如果窗体宽度小于文本宽度,则文本将被截断。在我的窗体上不会出现“完全不显示”的情况。 - user6522773
@JeremyThompson 这是可行的,但当用户扩展表单时,我必须再次刷新它,否则它将显示不完整的文本。 - Ahmed
@x... 我正在使用VS 2010和.Net框架3.5。 - Ahmed
3个回答

18

你可以基于ToolStripProfessionalRenderer创建自定义渲染器,并覆盖OnRenderItemText方法,使用省略号绘制文本:

public class CustomRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        if (e.Item is ToolStripStatusLabel)
            TextRenderer.DrawText(e.Graphics, e.Text, e.TextFont,
                e.TextRectangle, e.TextColor, Color.Transparent,
                e.TextFormat | TextFormatFlags.EndEllipsis);
        else
            base.OnRenderItemText(e);
    }
}

然后只需要将您的StatusStripRenderer设置为自定义渲染器即可:

this.statusStrip1.Renderer = new CustomRenderer();
在下面的示例中,您可以看到ToolStripStatusLabel的行为,它的Spring属性设置为true,并且其StatusStrip使用CustomRenderer

输入图像描述


我正在使用VS2015.3,.NET 4.0和Win10。这是statusStrip标签的默认行为。我不需要扩展它。 - user6522773
@x... 这个示例是在 Windows 8.1 上使用 VS 2013.4.NET 4.5 创建的。看起来我们需要一个修复程序。 - Reza Aghaei
感谢@RezaAghaei,我正在使用VS 2010和.Net 3.5 Windows 8.1。 - Ahmed
感谢 @RezaAghaei 提供的绝妙解决方案!请注意,您的答案还应包括:只有在设置了 this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table; 时才能正常工作。HorizontalStackWithOverflow 的布局样式将无法正常工作。 - Joe Uhren

10
如果您设置了
ToolStripStatusLabel.Spring = True;

如果您这样设置,您将不会看到“...”,即使可用空间不足,文本仍然会显示。


4

在Visual Studio 2017中,接受的答案对我无效。这里提供另一个简单的解决方案。 将StatusStripLayoutStyle属性设置为Flow。即:

 statusStrip1.LayoutStyle= LayoutStyle.Flow;

设置

`statusStrip1.AutoSize= false;`

1
你可能在应用解决方案时犯了错误。请确保已添加状态旅行标签。还要确保将标签的Spring属性设置为true,并且正在使用我在答案中发布的渲染器。 - Reza Aghaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接