在标签中显示暂停的定时器值
Show paused Timer value in Label
我创建了一个 C# windows 表单应用程序,它使用计时器每 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);
}
更改倒计时的使用方法。使用 TimeSpan 数据类型。将变量初始化为 5 分钟 New TimeSpan(0, 5, 0)
并使用它代替开始时间和 Now()。
使用 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;
}
我创建了一个 C# windows 表单应用程序,它使用计时器每 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);
}
更改倒计时的使用方法。使用 TimeSpan 数据类型。将变量初始化为 5 分钟 New TimeSpan(0, 5, 0)
并使用它代替开始时间和 Now()。
使用 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;
}