在标签中显示暂停的计时器值

本文关键字:计时器 暂停 显示 标签 | 更新日期: 2023-09-27 17:56:44

我创建了一个 C# 窗口表单应用程序,该应用程序使用计时器每 5 分钟清除一次输入框。有一个名为 lblTime 的标签,用于显示应用程序打开时任何给定点经过的时间量。我希望能够通过单击按钮来禁用或暂停计时器(Clock.Enabled = false),并让 lblTime 保持在单击按钮时经过的时间量。但是,由于计算 elapsedTime 变量的方式 (DateTime.Now - startTime),即使在禁用计时器后,此值也会继续更改。

所以,总结一下:lblTime 将运行时间显示为时钟滴答声时钟可以通过单击按钮来禁用,但 lblTime 会继续递增lblTime 需要在禁用时钟的同一按钮单击时停止在当前值上,然后能够从该相同值再次开始计数。

将显示启动时钟、初始化和更新 lblTime 的代码。

任何帮助将不胜感激,谢谢马克

    private void btnStart_Click(object sender, EventArgs e)
    {
        //Timers set to start ticking
        Clock.Enabled = true;
        startTime = DateTime.Now; //the milisecond that btnStart is clicked
        initialiseClock();
        initialiseIntervalCounter();
    }
    private void initialiseClock() //initialisation of Clock Timer
    {
        Clock = new System.Windows.Forms.Timer();
        Clock.Tick += new EventHandler(Clock_Tick); //calls Clock EventHandler
        Clock.Interval = 1000; //1 second in miliseconds
        Clock.Start();
    }
    private void Clock_Tick(object sender, EventArgs e) //Clock EventHandler definition
    {
        updateTimeDisplay();
        checkDisplay();
    }
    private void updateTimeDisplay()
    {
        elapsedTime = (DateTime.Now - startTime);
        lblTime.Text = Convert.ToString(elapsedTime);
    }

在标签中显示暂停的计时器值

在秒内使用 bool 标志、TimeSpan和计数器,直到下一次清除:

DateTime startTime = DateTime.Now;
TimeSpan elapsed = new TimeSpan(0);
bool running = true;
int clearInSeconds = 300;
private void Clock_Tick(object sender, EventArgs e)
{
    // function one: count elapsed running time
    if (running) elapsed = elapsed.Add(new TimeSpan(0, 0, 1));
    lblTime.Text = startTime.Add(elapsed).ToLongTimeString();
    // function two: clear stuff after interval:
    if (clearInSeconds-- <= 0)
    {
        clearInSeconds = 300;
        // clear your stuff now
    }
}

使用按钮单击可在正在运行和不运行之间切换。我点击了一下标签:

private void lblTime_Click(object sender, EventArgs e)
{
    running = !running;
}

更改使用倒计时时间的方法。 使用时间跨度数据类型。 将变量初始化为 5 分钟New TimeSpan(0, 5, 0)并使用它代替开始时间和 Now()。