2012-02-14 157 views
1

我有从文件读取并通过标签流式传输的代码。但是当我取消选中该复选框,并再次检查它,它只是从那里离开如何使定时器重新启动?

这是我的代码

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked == true) 
     { 
      timer1.Enabled = true; 
      timer1.Start(); 
     } 
     else 
     { 
      timer1.Enabled = false; 
     } 
    } 
    private int start = 0; 
    private string lyricspath = @"lyrics.txt"; 
    private void timer1_Tick(object sender, EventArgs e) 
    { 
     TextReader reader = new StreamReader(lyricspath); 
     string[] read = File.ReadAllLines(lyricspath); 
     string join = string.Join(" ", read); 
     int number = join.Length; 
     start++; 
     string str = join.Substring(start, 15); 
     if (start == number - 15) 
     { 
      start = 0; 
     } 
     label1.Text = str; 
    } 

回升有没有什么办法让计时器每一个的话,我取消时间在完全启动选中复选框?

+0

你应该分享你的定时器的实例。 – Candide 2012-02-14 19:18:02

回答

0

如果您在支票上改变事件的开始重置为零,应复位定时器:

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked == true) 
     { 
      start = 0; 
      label1.Text = string.Empty; 
      timer1.Enabled = true; 
      timer1.Start(); 
     } 
     else 
     { 
      timer1.Enabled = false; 
     } 
    } 

我有一个类似的过程,当表单加载时我启动一个计时器,如果他们有一个表单打开一段时间,我让他们选择打开表单。如果他们这样做,那么我将计时器计数重置为零,并且过程重新开始。

+0

同意,但你也应该重置你的label1文本为空。 – David 2012-02-14 19:20:48

+0

tyvm工作感谢:D – 2012-02-14 19:20:50

+0

@David同意。我刚才展示了如何重置计时器。 – Taryn 2012-02-14 19:21:55

1

设置Interval属性...以毫秒为单位... 1000 =1秒

+0

我目前有间隔被设置通过一个轨迹条 不是问题的问题是,如果我取消选中该框并再次检查它继续读取文件从它离开的地方我希望它开始读取文件从再次开始 – 2012-02-14 19:16:09

1

Timer.EnabledTimer.Start()在功能上是等同的。

我怀疑,你需要重置你的启动变量。

if (checkBox1.Checked == true) 
{ 
    start = 0; 
    label1.Text = string.Empty; 
    timer1.Start(); 
} 
else 
{ 
    timer1.Stop(); 
} 

编辑以包括重置每个评论的标签。

+0

同意,但他也需要清除label1文本。 – David 2012-02-14 19:21:36