【发布时间】:2016-07-23 06:29:52
【问题描述】:
这是我的关键代码:
using System;
using System.Windows.Forms;
namespace Scroller
{
public partial class Form1 : Form
{
int i, j;
bool k = false;
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = "Time:"+ System.DateTime.Now.ToString();
i--;
j = i + this.Width;
if (i < this.Width && i > 0)
{
label1.Left = i;
}
else
if (i < 0 && k == false)
{
label1.Left = i;
k = true;
}
else
if (i < 0 && k == true)
{
label1.Left = j;
k = false;
}
if (i < 0 - label1.Width)
{
i = this.Width - label1.Width;
}
}
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "Time:"+ System.DateTime.Now.ToString();
i = this.Width - label1.Width;
label1.Left = i;
}
}
}
我想要的效果是整个时间字符串从右到左移动。当文本的一个像素在左侧消失时(因为它超出了表单的左边框),该像素将显示在右侧。
也就是说,不能通过删除字符串的第一个字符并附加到最后一个字符来达到效果。
我知道使用两个标签会更容易。在表单中设置一个位置,并在表单中隐藏另一个位置。同时移动它们。
当第一个标签触及表单的左边框时,第二个标签触及表单的右边框。第一个移出,第二个移入。直到第二个完全移入,重置它们的 x 位置。
但我只想使用一个标签。所以我选择快速切换标签的位置,并试图“欺骗”用户的眼睛。 问题是label在左右切换的时候闪的很明显。虽然我把定时器的时间间隔设置在20以下,问题还是存在。
你能帮我解决闪退问题或启发我其他方法,只需使用一个标签和一个计时器来制作我需要的效果吗?
谢谢。如果我的问题描述得不够清楚或需要更多代码,请告诉我。
【问题讨论】: