我只是刚刚进入gui,所以如果我错过了一些明显的东西,请原谅我。恐怕Google帮不上什么忙。
我的基本目标是有选框样式的文本在屏幕上滚动一组次数。我利用一个计时器实现了滚动方面,它在屏幕上滚动一个名为"我的文本在这里"的标签(取自本教程:http://www.youtube.com/watch?v=-y-Z0i-DeAs注:我不会说他说的语言),但我一直无法让事情停止。我愿意使用不同的方式来实现滚动,但这是目前为止我发现的唯一一个能很好地配合我目前gui知识水平的例子(基本上是拖放)。
private void timer_Tick(object sender, EventArgs e)
{
this.Refresh();
labelTesting.Left += 5;
if (labelTesting.Left >= this.Width)
{
labelTesting.Left = labelTesting.Width * -1;
}
}
我最好的猜测是计时器只是在每次滴答声中重新开始整个过程。我已经尝试通过让它在运行I次后返回并告诉标签要显示什么来解决这个问题,但这不起作用。我似乎也找不到办法叫它停下来。
http://www.dotnetperls.com/timer有一个例子,其中计时器被设置为运行给定的时间量,但我不知道如何实现时,搞乱gui。实现我想要的功能的最佳方式是什么?如有任何见解或建议,不胜感激。
编辑:根据答案和评论中的建议,我编辑了代码,以便在设置自己到给定位置之前运行应该是30秒。然而,文本不再滚动。我将继续努力,但希望能有更多的意见。
private void timer_Tick(object sender, EventArgs e)
{
var time = DateTime.Now;
if(time < DateTime.Now.AddSeconds(-30)) // you decide when to stop scrolling
{
Timer timer = (Timer)sender;
timer.Stop();
labelTesting.Left = 0; // or wherever it should be at the end of the scrolling
}
this.Refresh();
labelTesting.Left += 5;
if (labelTesting.Left >= this.Width)
{
labelTesting.Left = labelTesting.Width * -1;
}
}
你需要停止计时器:
private void timer_Tick(object sender, EventArgs e)
{
if (someConditionToEndScroll) // you decide when to stop scrolling
{
Timer timer = (Timer) sender;
timer.Stop();
labelTesting.Left = 0; // or wherever it should be at the end of the scrolling
}
this.Refresh();
labelTesting.Left += 5;
if (labelTesting.Left >= this.Width)
{
labelTesting.Left = labelTesting.Width * -1;
}
}