Таймер Обратного Отсчета Формы C# Windows
У меня есть 3 текстовых поля (часы, минуты, секунды), кнопка запуска, паузы и остановки, и я использую метки, чтобы показать текущий таймер. У меня также есть таймер с интервалом 1000
. Мой вопрос в том, почему это не будет отображать время с помощью меток? Все остальное работает, он просто не будет регистрировать, что я поместил значения в текстовые поля.
Код
Таймер Запуска: private void startbutton_Click(object sender, EventArgs e)
{
if (paused != true) //Timer is not paused (active)
{
int.TryParse(textBoxhrs.Text, out hours);
int.TryParse(textBoxmin.Text, out minutes);
int.TryParse(textBoxsec.Text, out seconds);
if (hours >= 1 || (minutes >= 1) || (seconds >= 1))
//If there is at least one integer entered in any of the 3 boxes, executes; else - //throws an exception
{
startbutton.Enabled = true;
pausebutton.Enabled = true; //changed the value to 'true'
stopbutton.Enabled = true; //changed the value to 'true'
textBoxhrs.Enabled = false;
textBoxmin.Enabled = false;
textBoxsec.Enabled = false;
}
else
{
MessageBox.Show("Enter at least one integer!");
}
}
}
private void stopbutton_Click(object sender, EventArgs e)
{
// Stop the timer.
paused = false;
timer1.Enabled = false;
startbutton.Enabled = true; //changed to true
stopbutton.Enabled = false; //changed to false
pausebutton.Enabled = false; //changed to false
textBoxsec.Clear();
textBoxmin.Clear();
textBoxhrs.Clear();
textBoxhrs.Enabled = true;
textBoxsec.Enabled = true;
textBoxmin.Enabled = true;
textBoxhrs.Enabled = true;
lblHr1.Text = "00";
lblMin1.Text = "00";
lblSec1.Text = "00";
MessageBox.Show("Timer is Stopped, to re-start press <Start>"); //updated to give user a chance to run the timer again after stoppage.
}
Кнопка Паузы:
private void pausebutton_Click(object sender, EventArgs e)
{
// Pause the timer.
timer1.Enabled = false;
paused = true; //
startbutton.Enabled = true; // changed to true
pausebutton.Enabled = false; //changed to false
}
Таймер:
private void timer1_Tick(object sender, EventArgs e)
{
// Verify if the time didn't pass.
if ((minutes == 0) && (hours == 0) && (seconds == 0))
{
// If the time is over, clear all settings and fields.
// Also, show the message, notifying that the time is over.
timer1.Enabled = false;
MessageBox.Show(textBoxMsg.Text);
pausebutton.Enabled = false;
stopbutton.Enabled = false;
startbutton.Enabled = true;
textBoxMsg.Clear();
textBoxsec.Clear();
textBoxmin.Clear();
textBoxhrs.Enabled = true;
textBoxMsg.Enabled = true;
textBoxsec.Enabled = true;
textBoxmin.Enabled = true;
textBoxhrs.Enabled = true;
lblHr1.Text = "00";
lblMin1.Text = "00";
lblSec1.Text = "00";
}
else
{
// Else continue counting.
if (seconds < 1)
{
seconds = 59;
if (minutes == 0)
{
minutes = 59;
if (hours != 0)
hours -= 1;
}
else
{
minutes -= 1;
}
}
else
seconds -= 1;
// Display the current values of hours, minutes and seconds in
// the corresponding fields.
lblHr1.Text = hours.ToString();
lblMin1.Text = minutes.ToString();
lblSec1.Text = seconds.ToString();
}
}
2 ответа:
Вам нужно сделать две вещи, чтобы заставить его работать:
Вам нужно запустить таймер в startbutton_Click:
if (hours >= 1 || (minutes >= 1) || (seconds >= 1)) //If there is at least one integer entered in any of the 3 boxes, executes; else - //throws an exception { startbutton.Enabled = true; ... timer1.Enabled = true; }
Вам нужно подключить событие timer Tick к timer1_Tick. Вы можете сделать это, выбрав таймер и нажав на значок молнии на панели инструментов в рамке свойств, а затем выбрав timer1_Tick для галочки.
Есть и другие проблемы с кодом, но причина, по которой вы не видите обновления меток, заключается в том, что вы никогда не запускаете таймер.
В стартовом клике нужно добавить:
... stopbutton.Enabled = true; //changed the value to 'true' textBoxhrs.Enabled = false; textBoxmin.Enabled = false; textBoxsec.Enabled = false; timer1.Start(); //<-- start the timer object