VB.NET
- Criando um cronômetro com stopwatch e Timer
Este artigo eu mostro como criar um cronômetro simples usando a classe StopWatch e o componente Timer.
Aproveitando o artigo eu também vou mostrar como realizar algumas tarefas básicas usando o VB .NET :
Então antes de iniciar a prática vamos falar um pouco da classe StopWatch.
A classe Stopwatch fornece um conjunto de métodos e propriedades que você pode usar para medir de uma maneira mais precisa o tempo transcorrido.
O classe Stopwatch é muito útil para calcular o tempo que foi gasto entre dois intervalos de tempo em uma aplicação VB .NET.
Para usar o objeto Stopwatch
você precisa chamar o seu método Start para iniciar a
contagem do tempo; o método Stop interrompe a contagem. O
método Reset é útil para limpar a contagem do tempo
iniciando o contador.
Temos a seguir a
sequência das etapas usadas para usar esta classe:
'Primeiro você cria uma nova instância da classe Dim cronometro As New Stopwatch ' Em seguida você inicia a contagem do tempo cronometro.Start() ' Aguarda a realização da operação VB .NET ' Após o encerramento da tarefa você para a contagem do tempo cronometro.Stop() ' Por último você exibe o tempo gasto para executar a tarefa em milisegundos Debug.WriteLine(stopWatch.ElapsedMilliseconds.ToString) |
Uma instância da classe
StopWatch pode estar em execução (Running) ou parada (Stopped),
para determinar o estado atual de uma instância StopWatch você
usa o método IsRunning.
O tempo gasto pode ser consultado através das propriedades Elapsed,
ElapsedMiliseconds ou ElapsedTicks, e isso pode ser
feito enquando a instância estiver em execução ou parada.
O método Reset é usado para limpar o tempo gasto acumulado em uma instância existente da classe StopWatch.
Criando um Cronômetro
Para exemplificar a utilização da classe StopWatch vou criar um cronômetro simples usando o Visual Basic 2008 Express Edition.
Abra o VB 2008 Express Edition e crie um novo projeto do tipo Windows Forms com o nome cronometro;
A seguir inclua os seguintes componentes no formulário padrão form1.vb:
Agora defina as seguintes propriedades do formulário form1.vb:
Defina o seguinte leiaute no formulário:
![]() |
1- Definindo um formulário elíptico
Para alterar o formato retangular padrão do formulário podemos usar o evento Paint do formulário e usando a classe Graphics criando um objeto pelo método CreateGraphics() para em seguida desenharmos uma elipse e preenchendo-a com uma cor definida.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim gr As System.Drawing.Graphics = Me.CreateGraphics() ' preenche a elipse. gr.FillEllipse(System.Drawing.Brushes.Coral, 0, 0, _ Me.ClientSize.Width - 5, _ Me.ClientSize.Height - 5) End Sub |
Obs: Para obter o efeito desejado a propriedade BorderStyle do formulário deve ser definida como None.
2- Usando o controle Timer
No evento Tick do controle Timer estamos verificando se existe uma instância da classe StopWatch em execução(Running), e, neste caso obtemos o tempo gasto e o colocamos em uma variável do tipo TimeSpan para em seguida exibir o resultado formatado em horas, minutos e segundos e milisegundos e exibimos os valores no DataGridView.
Private Sub Cronometro_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cronometro.Tick If crono.IsRunning Then 'Coloca o tempo total na variável do tipo TimeSpan Dim ts As TimeSpan = crono.Elapsed ' Mostra a informação dividida em Horas, Minutos, Segundo e Milisegundos. Me.txtCronometro.Text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10) 'incluir a informação no DataGridView If lapAtiva Then Me.dgvTempos.Rows.Add(Me.dgvTempos.Rows.Count, txtCronometro.Text) lapAtiva = False End If End If End Sub |
3- Iniciando o cronômetro
Para iniciar o cronômetro definimos o código abaixo no evento Click do botão Iniciar.
O código verifica se existe uma instância em execução da classe StopWatch e neste caso para a contagem de tempo da instância e altera as propriedades dos botões de comando, caso contrário, inicia a contagem de tempo;
Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click If crono.IsRunning Then crono.Stop() btnIniciar.Text = "Iniciar" btnTempo.Text = "ReIniciar" btnSalvar.Enabled = True btnRemover.Enabled = True Else crono.Start() btnIniciar.Text = "Parar" btnTempo.Text = "Tempo" btnSalvar.Enabled = False btnRemover.Enabled = False End If End Sub |
4- Obtendo uma tomada de tempo
No evento Click do botão Tempo, definimos o código abaixo onde alteramos a propriedade da variável lapAtiva para True de forma a exibir os dados no DatagridView através do evento Tick do controle Timer. Se a propriedade Text do botão for diferente de "Tempo" usamos a propriedade Reset() para limpar a contagem do tempo reiniciando o contador.
Private Sub btnTempo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTempo.Click If btnTempo.Text = "Tempo" Then If crono.IsRunning Then lapAtiva = True End If Else txtCronometro.Text = "00:00:00.00" btnTempo.Text = "Tempo" crono.Reset() End If End Sub |
5- Salvando os dados do DataGridView em um arquivo texto
Podemos salvar os dados de tempos tomados e exibidos no DataGridView; para isso definimos a rotina salvaTempos() cujo código é mostrado a seguir.
Nele obtemos a data atual no formato longo e removemos os dois pontos para montar a variável caminho que define o caminho e nome do arquivo que será salvo. Dessa forma teremos arquivos com nomes distintos a cada tomada de tempo.
Em seguida criamos um objeto StreamWriter e percorrermos o DataGridView salvando os dados das duas células existentes.
Private Sub salvaTempos() Dim data As Date = Now Dim valor As String = data.ToLongTimeString.Replace(":", "") Dim caminho As String = "c:\dados\tempos" & valor & ".txt" Using writer As New StreamWriter(caminho) For Each row As DataGridViewRow In Me.dgvTempos.Rows writer.WriteLine(String.Format("{0},{1}", _ row.Cells(0).Value, _ row.Cells(1).Value)) Next End Using End Sub |
6- Limpando as linhas do DataGridView
Para limpar as linhas do DataGridView usamos o método Clear da classe Rows. Isso vai funcionar pois o nosso DataGridView esta sendo usando no modo não vinculado e não temos um datasource associado ao mesmo. O código é o seguinte:
Private Sub btnRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemover.Click dgvTempos.Rows.Clear() End Sub |
7- Salvando os dados do DataGridView
Para salvar os dados apenas chamamos a rotina salvaTempos() já definida no evento Click do botão Salvar:
Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click salvaTempos() End Sub |
8- Encerrando a aplicação
Para encerrar basta definir o código abaixo no evento Click do botão Sair:
Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click If MsgBox("Deseja encerrar ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Close() End If End Sub |
Executando o projeto e efetuando algumas tomadas de tempos teremos como resultado o formulário abaixo e o arquivo salvo com o nome tempos111321.txt, os tempos tomados sendo exibidos no bloco de notas:
![]() |
![]() |
Embora simples a aplicação apresenta alguns conceitos básicos e mostra como efetuar algumas tarefas envolvendo os controles Timer e DataGridView.
Eu sei é apenas VB .NET, mas eu
gosto...
Referências:
José Carlos Macoratti