C# 滚动标签滞后问题

C# 滚动标签滞后问题,c#,scroll,labels,C#,Scroll,Labels,大家好,我正在制作一个在屏幕上滚动文本的应用程序 一个小小的例外是,文本的长度与屏幕上某些字体样式的冻结/滞后相比,人们想知道是否有人对此有一些见解 void t_Tick(object sender, EventArgs e) { STimer t = sender as STimer; Label b = (Label)Controls[t.Name.Substring(1)]; string sScrollText = b.

大家好,我正在制作一个在屏幕上滚动文本的应用程序 一个小小的例外是,文本的长度与屏幕上某些字体样式的冻结/滞后相比,人们想知道是否有人对此有一些见解

    void t_Tick(object sender, EventArgs e)
    {

        STimer t = sender as STimer;
        Label b = (Label)Controls[t.Name.Substring(1)];
        string sScrollText = b.Text;

        sScrollText = sScrollText.Substring(1,
            sScrollText.Length - 1) + sScrollText.Substring(0, 1);
        b.Text = sScrollText;

    }
这就是制作标签滚动示例的代码

100格罗吉亚字体与此文本

1886年,一些地方通过了禁止法,约翰·彭伯顿发明了可口可乐——这是他以前的法国葡萄酒可口可乐的非酒精版本。起初,彭伯顿在苏打喷泉附近以每杯5美分的价格出售可口可乐作为专利药;他声称可口可乐可以治愈头痛、吗啡成瘾和阳痿等疾病。从1894年开始,可口可乐开始瓶装销售,并在户外墙上做广告

供参考我为测试找到的随机段落

运行良好

100赛格脚本

冻结和严重滞后到无法关闭程序的程度

它似乎在字体上增加了标签的物理大小,使程序冻结在一个大框中


如果您有任何建议,我们将不胜感激

您的问题实际上不是您使用的
字体
,而是
标签的
自动调整大小
属性

因为你使用了一个很长的文本,你严重地超出了它的容量

您有两个可更改的选项:

  • 您可以设置
    AutoSize=false
    并将
    标签的大小调整为合适的大小,甚至可以锚定它。您可以使用
    MeasureString
    查找更正标签尺寸所需的高度

  • 您只能指定文本的一小部分,这样就不会无限延伸文本。您可以使用
    MeasureString
    找到可以显示的字符数的近似值,然后添加一点,或者使用您希望允许的最大像素宽度

顺便说一句:甚至还有一个最大像素数(),控件在“放弃”之前可能需要显示其内容,并且根本不显示任何内容。在这里,不同的字体和字体大小会有所不同

这里有一种方法,可以在设置
字体后调整要显示的文本部分的长度或
标签的
高度

using (Graphics G = label1.CreateGraphics() )
{
    // measure the size the label would need to display the text:
    SizeF size = G.MeasureString(sScrollText, label1.Font);

    // either restrict the text length:
    int maxWidth = 1600;
    len = (int) (sScrollText.Length * maxWidth / size.Width);

    // or set the Label's Height:
    label1.Height = (int) size.Height + 1;
}

顺便说一句:由于你是按字符前进的,所以显示看起来总是有点不稳定,这既不平滑也不稳定,除非你选择像
Consolas
这样的固定字体。以像素为单位进行绘制看起来更好,但当然要多做一些工作。或者可以将包含
面板的
标签
移到左侧。

您一次运行了多少个?看起来你可能会有很多?@Belogix可能会有很多是的,但只运行一次就冻结了它是否会自动调整大小?Mulitline?@TaW AutoSize是真的标签没有多行,是吗?没有。但是如果您设置AutoSize=false并设置足够的高度,标签会显示多行。谢谢我使用您的方法购买小mods,我将max width设置为screes max加1000,这允许滚动文本将其单词放置在看不见的地方,以仍然提供滚动效果