0

我正在创建我的第一个 c# 项目,一个个人时间跟踪应用程序。到目前为止非常基本,但是在我进一步了解之前,我想让计时器正常工作。

到目前为止,计时器将启动/停止并重置。然而,我想做的一件奇怪的事情是让用户设置一个时间并让计数器从那里开始。

因此,如果他们想从 20 分钟开始并计数,那么它会

例如: 00:20:00 将从 20 开始计数并添加到其中。

然而到目前为止,我还没有弄清楚。

这是代码:

namespace TimeTracker
{
    public partial class Form1 : Form
    {

    public Form1()
    {
      InitializeComponent();
      TimerBox.Text = string.Format("00:00:00");
    }

    int ss = 0;
    public void StartButton_click(object sender, EventArgs e)
    {
      timer1.Start();
      timer1.Enabled = true;
      timer1.Interval = 1000;
    }
    public void StopButton_click(object sender, EventArgs e)
    {
      timer1.Stop();
      TimerBox.Text = TimeSpan.FromSeconds(ss).ToString(); 
    }
    public void ResetButton_click(object sender, EventArgs e)
    {
      ss = 0;
      TimerBox.Text = TimeSpan.FromSeconds(ss).ToString();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
      ss++;
      TimerBox.Text = TimeSpan.FromSeconds(ss).ToString(); 
    }
  }
}

这是应用程序:

http://imgur.com/VNXVrtp

任何帮助将不胜感激,如果您愿意,我可以提供更多详细信息!

编辑:由于不清楚,我的问题是:

什么过程会更好地编码这个,添加到整数,或者如果有更好的方法来实现这个?

4

3 回答 3

0

尝试正常使用计时器(从 00:00:00.00 开始),并在更新输出标签/文本框等时添加用户写入的时间。

于 2013-05-09T19:08:43.890 回答
0

尝试类似...

public partial class Form1 : Form
{

    private TimeSpan Offset = new TimeSpan();
    private System.Diagnostics.Stopwatch SW = new System.Diagnostics.Stopwatch();

    public Form1()
    {
        InitializeComponent();
        timer1.Interval = 1000;
        UpdateTime();
    }

    public void StartButton_click(object sender, EventArgs e)
    {
        TimeSpan TS;
        if (TimeSpan.TryParse(TimerBox.Text, out TS))
        {
            Offset = TS;
        }
        else
        {
            MessageBox.Show("Invalid Starting Time. Resetting to Zero");
            Offset = new TimeSpan();
        }

        SW.Restart();
        UpdateTime();
        timer1.Start();
    }

    public void StopButton_click(object sender, EventArgs e)
    {
        SW.Stop();
        timer1.Stop();
    }

    public void ResetButton_click(object sender, EventArgs e)
    {
        Offset = new TimeSpan();
        if (SW.IsRunning)
        {
            SW.Restart();
        }
        else
        {
            SW.Reset();
        }
        UpdateTime();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        UpdateTime();   
    }

    private void UpdateTime()
    {
        TimerBox.Text = Offset.Add(SW.Elapsed).ToString(@"hh\:mm\:ss");
    }

}
于 2013-05-09T18:56:39.120 回答
0

您可以将该变量的初始值设置为ss用户输入的任何预定义整数,例如

DateTime _dt = DateTime.Parse(TimertBox.Text);
int ss = _dt.Second + _dt.Minute * 60 + _dt.Hour * 3600;
于 2013-05-09T18:11:14.183 回答