VB .NET -  Deslocando a entrada de texto (para iniciantes)

Neste tutorial vamos mostrar como podemos criar uma aplicação usando a linguagem VB .NET para deslocar a entrada de texto do usuário ao estilo de um anúncio de letreiro.

 

Este tutorial é dirigido aos iniciantes da linguagem VB .NET e nele vamos criar um programa que permitirá que você digite o texto e em seguida, após clicar em um botão, o texto irá rolar até que o programa seja fechado.

Depois de aprender o básico, existem maneiras mais otimizadas de codificação (multi threading) que podem ser incorporadas a este programa para torná-lo mais estável e fácil de usar.

Primeiro, adicionamos dois rótulos (Label), uma caixa de texto(TextBox) e um botão(Button). Um dos rótulos é onde o deslocamento irá ocorrer, e o outro é usado apenas para informar o usuário para inserir o texto na caixa de texto.

 

Recursos usados

Deslocando o texto - versão 1

 

Abra o Visual Studio 2013 Express for Windows desktop e clique em New Project;

 

Selecione a linguagem VB .NET, o template Windows Forms Application, informe o nome VBNET_Scroll_Texto e clique em OK;

 

 

No formulário Form1.vb inclua os seguintes controles:

Disponha os controles conforme o leiaute da figura abaixo:

 

 

Agora vamos definir o código abaixo no formulário form1.vb:

 

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        btnRolarTexto.Enabled = False
    End Sub
    Private Sub txtTexto_TextChanged(sender As Object, e As EventArgs) Handles txtTexto.TextChanged
        If txtTexto.Text.Trim() = "" Then
            btnRolarTexto.Enabled = False
        Else
            btnRolarTexto.Enabled = True
        End If
    End Sub
    Private Sub btnRolarTexto_Click(sender As Object, e As EventArgs) Handles btnRolarTexto.Click
        btnRolarTexto.Enabled = False
        IniciarRolagemDoTexto()
    End Sub
    Private Sub IniciarRolagemDoTexto()
        Dim sb As New System.Text.StringBuilder(txtTexto.Text & " ")
        Do
            Dim ch As Char = sb(sb.Length - 1)
            sb.Remove(sb.Length - 1, 1)
            sb.Insert(0, ch)
            lblLetreiro.Text = sb.ToString()
            lblLetreiro.Refresh()
            System.Threading.Thread.Sleep(500)
        Loop
    End Sub
End Class

No código acima temos que:

1- No evento Load do formulário desabilitamos o botão para rolar o texto

2- No evento TextChanged da caixa de texto qualquer alteração irá habilitar o botão para rolar o texto

3- No evento Click do botão btnRolarTexto chamamos a rotina IniciarRolagemDoTexto

4- Na rotina IniciarRolagemDoTexto temos:

A classe StringBuilder ,  ela faz parte do namespace System.Text ; então a classe System.Text.StringBuilder pode ser usada para modificar uma string sem que seja necessário criar um novo objeto. Por exemplo a concatenação de strings em um loop pode ser uma destas situações onde o uso de StringBuilder pode melhorar muito o desempenho do seu código.

 

Podemos pensar no objeto StringBuilder como um buffer dinâmico que pode conter uma String com a habilidade de aumentar seu tamanho a partir do zero até a capacidade final do buffer. O tamanho do buffer vai crescendo a medida que o tamanho dos caracteres presentes no objeto StringBuilder vai aumentando.

 

O método Sleep(n) da thread  - interrompe a thread imediatamente, onde n é o valor em milisegundos da pausa. No nosso exemplo usamos uma pausa de 500 milisegundos.

O efeito visual é que o texto se desloca na Label como em um letreiro de anúncios.

Deslocando o texto - versão 2

Nesta versão vamos usar o controle Timer para obter o mesmo resultado.

No menu PROJECT clique em Add Windows Forms e aceite o nome padrão Form2.vb.

No formulário form2.vb inclua os seguintes controles:

Disponha os controles conforme o leiaute abaixo:

No formulário form2.vb inclua o código a seguir :

Public Class Form2

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        lblLetreiro1.Text = Mid(lblLetreiro1.Text, Len(lblLetreiro1.Text)) & Mid(lblLetreiro1.Text, 1, Len(lblLetreiro1.Text) - 1)
        lblLetreiro1.ForeColor = Color.White
        lblLetreiro1.BackColor = Color.Red
    End Sub

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        lblLetreiro2.Text = Mid(lblLetreiro2.Text, 2, Len(lblLetreiro2.Text)) & Mid(lblLetreiro2.Text, 1, 1)
        lblLetreiro2.ForeColor = Color.White
        lblLetreiro2.BackColor = Color.Red
    End Sub

    Private Sub btnLetreiro1_Click(sender As Object, e As EventArgs) Handles btnLetreiro1.Click
        Timer1.Enabled = True
        lblLetreiro1.Text = txtTexto.Text
    End Sub

    Private Sub btnLetreiro2_Click(sender As Object, e As EventArgs) Handles btnLetreiro2.Click
        Timer2.Enabled = True
        lblLetreiro2.Text = txtTexto.Text
    End Sub
End Class

No código acima temos que;

1- No evento Tick do controle Timer1 estamos manipulando o texto que é atribuído a Label usando as funções Mid e Len

O componente Timer presente no VB.NET não é igual ao timer das versões anteriores.  No VB6 o controle timer apresentava a seguinte peculiaridade:

No VB.NET você não pode mais atribuir o valor zero a propriedade Interval . Para ativar o controle deve definir enabled = True.

A função Mid retorna uma string contendo um número específico de caracteres de uma string.

Retorna uma string contendo um número definido de caracteres. Sintaxe: Mid(String , inicio, tamanho)

Exemplo: a= Mid("Macoratti", 4,3)  =>  a= "ora"

A função Len retorna o comprimento(tamanho) de uma string.

Ex:  a = len("Macoratti")   =>  a =  9

2- No evento Tick do controle Timer2 estamos manipulando o texto que é atribuído a Label usando as funções Mid e Len

3- No evento Click do botão de comando btnLetreiro1 habilitamos o Timer1 e atribuímos o texto à Label lblLetreiro1

4- No evento Click do botão de comando btnLetreiro2 habilitamos o Timer2 e atribuímos o texto à Label lblLetreiro2

Deslocando o texto - versão 3

Nesta versão vamos usar o controle Timer para obter o mesmo resultado e vamos rolar o texto na caixa de texto sem usar Labels.

No menu PROJECT clique em Add Windows Forms e aceite o nome padrão Form3.vb.

No formulário form2.vb inclua os seguintes controles:

Disponha os controles conforme o leiaute abaixo:

No formulário form3.vb inclua o código a seguir :

Public Class Form3
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        txtTexto.Text = RolarTexto(txtTexto.Text)
    End Sub

    Public Function RolarTexto(ByVal Texto As String)
        Dim Str1 As String = Texto.Remove(0, 1)
        Dim Str2 As String = Texto(0)
        Return Str1 & Str2
    End Function

    Private Sub btnIniciarRolagem_Click(sender As Object, e As EventArgs) Handles btnIniciarRolagem.Click
        Timer1.Start()
    End Sub
End Class

 

No código acima temos que:

1- No evento Tick do controle Timer1 chamamos a rotina RolarTexto() a cada 0.4 segundos passando o texto informado no controle TextBox

2- O método RolarTexto() usa o método Remove da classe TextBox para remover um caractere do texto e coloca o caractere removido na frente do texto invertendo a ordem

3- No evento Click do botão btnIniciarRolagem iniciamos o controle Timer1

Nota: Para habilitar a execução dos formulários definindo o formulário inicial, clique com o botão direito do mouse sobre o projeto e a seguir clique em Properties. Selecione a guia Applications e em Startup Form escolha o formulário que irá iniciar quando o projeto for executado.

Pegue o projeto completo aqui : VBNET_Scroll_Texto.zip

    João 6:14 Vendo, pois, aqueles homens o sinal que Jesus operara, diziam: este é verdadeiramente o profeta que havia de vir ao mundo.
   
João 6:15 Percebendo, pois, Jesus que estavam prestes a vir e levá-lo à força para o fazerem rei, tornou a retirar-se para o monte, ele sozinho.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti