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