-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

これを見たことがあると思います:ラベル コントロールを使用して c# winform でループ マーキー テキストを作成する

最初の答えを読んでください。

于 2012-08-09T18:05:24.840 に答える
0

は正の値であると想定しthis.Widthているため、繰り返し減算を行っている場合、最初にこの値を達成するだけです。if (xPos == 0)代わりに試す

于 2012-08-09T18:02:59.920 に答える
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

クライアント側からマーキーを使用する方が簡単であることに同意しますが、それは彼が求めていたものではありません...

xPos を this.Width で開始し、デクリメントしているため、this.Width ではなく 0 に達したら 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 に答える