-2

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

    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

4 回答 4

1

我很确定您可能已经看到了:使用 Label control to create looping marquee text in c# winform

阅读第一个答案。

于 2012-08-09T18:05:24.840 回答
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;
    }
于 2012-08-09T18:13:16.350 回答
0

虽然我同意从客户端使用选框会更容易,但这不是他要问的......

您在 this.Width 处启动 xPos 并递减它,因此,当 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--;
}
于 2012-08-09T18:14:57.730 回答
0

我假设this.Width是一个正值,因此如果你重复减法,你只会在开始时达到这个值。试试 if (xPos == 0)

于 2012-08-09T18:02:59.920 回答