Usuário com melhor resposta
Timer em Windows Forms

Pergunta
-
Fala pessoal, queria saber como faço um timer em contagem regressiva. Ele tem que começar dos 100 segundos e ir até o 0, quando chegar no 0 tem que aparecer uma messagebox dizendo que o tempo acabou. Até agora o que eu fiz foi isso:
DateTime startGameTimer = new DateTime(//Aqui precisa ser os segundos, mas eu não sei como faz.); //Criei um DateTime para os segundos e aí eu chamo ele quando der Load no formulário. private void TelaJogar_Load(object sender, EventArgs e) { timerTelaJogar.Start(); } //Quando carregar o formulário, assim que iniciar o programa, já dispara o timer, e aí eu fiz o Tick dele. private void timerTelaJogar_Tick(object sender, EventArgs e) { lblTimerJogo.Text = startGameTimer.ToString("ss:fff"); } //Coloquei pra ele exibir os segundos e os milésimos. //Se eu colocar lblTimerJogo.Text = DateTime.Now.ToString("ss:fff"); aí ele começa a contar da hora atual, funciona, mas não é esse meu desejo.
Lembrando que ele tem que começar a contar do 100 e ir até o 0.
Desde já agradeço.
Respostas
-
Olá Giovanni,
Implementa dessa maneira:
Timer timerTelaJogar = new Timer(1000); int contador = 100; private void TelaJogar_Load(object sender, EventArgs e) { timerTelaJogar.Start(); lblTimerJogo.Text = "100"; } private void timerTelaJogar_Tick(object sender, EventArgs e) { contador--; if (contador >= 0) lblTimerJogo.Text = contador.ToString(); else timerTelaJogar.Stop(); }
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 7 de novembro de 2016 12:21
- Não Sugerido como Resposta Giovanni Mallia terça-feira, 8 de novembro de 2016 01:56
- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 15 de novembro de 2016 13:57
-
Olá Giovanni!
Não era para colocar o using, mas sim, o namespace completo antes da criação do timer:
System.Timers.Timer timerJogar = new System.Timers.Timer(1000);
Abraço!
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Marcado como Resposta Robson William SilvaModerator segunda-feira, 14 de novembro de 2016 11:22
Todas as Respostas
-
Olá Giovanni,
Implementa dessa maneira:
Timer timerTelaJogar = new Timer(1000); int contador = 100; private void TelaJogar_Load(object sender, EventArgs e) { timerTelaJogar.Start(); lblTimerJogo.Text = "100"; } private void timerTelaJogar_Tick(object sender, EventArgs e) { contador--; if (contador >= 0) lblTimerJogo.Text = contador.ToString(); else timerTelaJogar.Stop(); }
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 7 de novembro de 2016 12:21
- Não Sugerido como Resposta Giovanni Mallia terça-feira, 8 de novembro de 2016 01:56
- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 15 de novembro de 2016 13:57
-
namespace Tempo
{
public partial class Form1 : Form
{
Int32 _tempo;
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = (--this._tempo).ToString();
if (this._tempo == 0)
{
timer1.Stop();
MessageBox.Show("O tempo acabou");
}
}
private void Form1_Load(object sender, EventArgs e)
{
Int32 tempo;
Int32.TryParse(label1.Text, out tempo);
this._tempo = tempo;
timer1.Interval = 1000;
timer1.Start();
}
}
} -
-
Eu fiz assim André
Timer timerJogar = new Timer(); int contador = 950; private void TelaJogar_Load(object sender, EventArgs e) { timerJogar.Start(); lblTimerJogo.Text = "1000"; } private void timerTelaJogar_Tick(object sender, EventArgs e) { contador--; if (contador >= 0) lblTimerJogo.Text = contador.ToString(); else timerJogar.Stop(); }
Mas tem outro problema. Como se trata de um programa de jogo da forca, a cada palavra inserida que o usuário errar, eu preciso adicionar 10 segundos no timer, só que esse timer ficou muito estranho. Ele não marca 100 segundos, ele tá marcando outra coisa que não são segundos, devem ser os milésimos. Está muito ruim de enxergar
-
Giovanni,
A unidade que vai no Timer é milissegundos, portanto se deseja 1 segundo seriam 1000 milissegundos.
Mas a ideia do meu código, é o timer ser acionado de segundo em segundo e o contador que eu criei, gerenciar a quantidade de vezes que o timer será executado, mostrando no Label os segundos. Após passar os 100 segundos ele dá um Stop no timer.
Entendeu?
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
-
Olá Giovanni!
O André Secco provavelmente utilizou a classe Timer do namespace System.Timers.. Como você provavelmente está utilizando o Windows Forms e já tem um "using System.Windows.Forms" no seu formulário, o Visual Studio está achando que você quer utilizar o Timer desse namespace..
Tente substituir no exemplo do André Secco onde tiver "Timer" por "System.Timers.Timer"..
Abraço!
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
Olá Giovanni!
O André Secco provavelmente utilizou a classe Timer do namespace System.Timers.. Como você provavelmente está utilizando o Windows Forms e já tem um "using System.Windows.Forms" no seu formulário, o Visual Studio está achando que você quer utilizar o Timer desse namespace..
Tente substituir no exemplo do André Secco onde tiver "Timer" por "System.Timers.Timer"..
Abraço!
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
Olá Giovanni!
Não era para colocar o using, mas sim, o namespace completo antes da criação do timer:
System.Timers.Timer timerJogar = new System.Timers.Timer(1000);
Abraço!
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Marcado como Resposta Robson William SilvaModerator segunda-feira, 14 de novembro de 2016 11:22
-
Bom dia,
Devido a falta de interação do autor dessa pergunta,
essa thread está sendo fechada. Caso o problema ainda
esteja ocorrendo, favor abrir uma nova thread.
Atenciosamente,
Robson William Silva
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.