为什么这个字幕代码不起作用?

时间:2012-08-09 17:58:56

标签: c#

我正在使用此代码来制作一个从右向左滚动的选框标签。

    private int xPos = 651;

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (this.Width == xPos)
        {
            //repeat marquee
            xPos = 651;
            this.Label7.Location = new System.Drawing.Point(651, 334);
            xPos--;
        }
        else
        {
            this.Label7.Location = new System.Drawing.Point(xPos, 334);
            xPos--;
        }
    }

651是表格的宽度。

此代码使标签从右向左移动,向下滚动表单,但不再在右侧重新启动。

4 个答案:

答案 0 :(得分:1)

我很确定你可能已经看过这个:using Label control to create looping marquee text in c# winform

阅读第一个答案。

答案 1 :(得分:0)

我认为this.Width是一个正值,因此如果你正在重复减法,你只能在开始时达到这个值。 请尝试使用if (xPos == 0)

答案 2 :(得分:0)

对我来说代码对我没有意义

尝试这样做,调整它就像你想要的那样。

    private bool goLeft;

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (Label7.Width + Label7.Left >= this.Width)
        {
            goLeft = true;
        }
        else if (Label7.Left < 0)
        {
            goLeft = false;
        }

        Label7.Left += goLeft ? -10 : 10;
    }

答案 3 :(得分:0)

虽然我同意从客户端使用大帐篷会更容易,但这不是他所要求的......

你正在this.Width启动xPos并递减它,所以当你达到0而不是this.Width时你需要重置xPos。 xPos仅等于this.Width,用于每次运行的第一次迭代。

private int xPos = this.Width;

private void timer1_Tick(object sender, EventArgs e) {
    if (xPos == 0) { xPos = this.Width; }
    this.Label7.Location = new System.Drawing.Point(xPos, 334);
    xPos--;
}