VB.NET  - o controle TrackBar


Neste artigo vou abordar o controle TrackBar. Não conhece ? Deixe-me então apresentá-lo.

O controle TrackBar lembra um ScrollBar pois ele fornece uma guia que o usuário pode mover com o mouse ou teclado sendo que a posição relativa da guia é exibida como o valor do controle. Diferentemente do ScrollBar , não existe uma versão horizontal e outra vertical para o TrackBar; Ao invés disto ele possui a propriedade Orientation que pode assumir os valores Horizontal e Vertical.

Um trackbar horizontal é idêntico ao um scrollbar horizontal onde o valor do controle aumenta quando o usuário move a guia da esquerda para a direita. Já o track bar vertical é o posto do scrollbar vertical; o valor do track bar aumenta da base para o topo.

As principais propriedades do controle Trackbar são:

Propriedade Tipo Descrição
Autozise Boolean Read/write - Se True a espessura é aumentada de forma automática.
BackColor Color Read/Write - A cor de fundo do controle
LargeChange Integer Read/Write - Valor a ser somado ou subtraido da propriedade Value quando o usuário pressiona as teclas Page Up ou Page Down. O valor padrão é 5.
Maximum Integer Read/Write - Máximo valor possível para a propriedade Value. O valor padrão é 10.
Minimum Integere Read/Write - Mínimo valor possível para a propriedade Value. O valor padrão é 0.
Orientation Orientation Read/Write - Indica a orientação do controle: Horizontal ou Vertical. O padrão é Horizontal.
SmallChange Integer Read/write - O valor a ser somando ou subtraído da propriedade Value quando o usuário pressiona uma das teclas com setas. O Valor padrão é 1.
TickFrequency Integer Read/Write - O intervalo entre as marcas tick. O padrão é 1.
TickStyle TickStyle Indica o tipo de marcas tick na track bar. Os valores possíveis são :
 -Both : marcas em ambos os lados
 -BottomRight - marcas na base do controle horizontal ou no lado direito do controle vertical
 -None - sem marcas no controle
 -TopLeft - marcas no topo do controle horizontal ou no lado esquerdo do controle vertical. 
Value Integere Read/Write - Representa o valor da posição atual da guia no track bar.

Os eventos do controle são :

Evento Dados Descrição
ValueChanged EventArgs Disparado quando a propriedade Value foi alterada, ou pelo evento Scroll ou via programa
Scroll EventArgs Disparado quando a guia for movida pelo mouse ou teclado

Vamos então a um pequeno exemplo usando o Trackbar.

Inicie um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET com o nome de TrackPersonagens

Os controles que vamos usar nesta aplicação são :

O layout do formulário deverá a ser igual ao da figura abaixo:

A idéia é a seguinte :

Eu vou acessar o banco de dados Northwind.mdb e obter os dados da tabela Employees usando um objeto DataReader e preencher um array com os dados; a seguir os dados serão exibidos no formulário e o controle trackbar será usado para navegar pelos registros ( digo do array).

Como cada empregado possui uma foto eu peguei umas fotos na web para poder exibir no controle PictureBox do projeto.

Vamos criar uma classe chamada ListaPersonagens no projeto. Inclua a classe no menu Project Add Class e altere o nome da mesma para ListaPersonagens .

Abaixo temos o código que define a classe: Na verdade apenas declaramos os membros da classe sem nenhum método.(Temos aqui quase um bean...)

Public Class ListaPersonagens

    Public nome As String
    Public nascimento As Date
    Public cidade As String
    Public pais As String
    Public foto As String
End Class

Agora volte ao formulário e inclua um import do namespace para acessar o banco de dados Access:

Imports System.Data.OleDb

A seguir no início do formulário declare as variáveis abaixo que serão usadas no projeto:

Dim conn As OleDbConnection

Dim cmd As OleDbCommand

Dim lista(10) As ListaPersonagens

Dim i As Integer = 0

 

Note que eu crie um array do tipo ListaPersonagens com 10 elementos : Dim lista(10) As ListaPersonagens

 

Agora no evento Load do formulário vou incluir o código que faz o acesso a base de dados e preenche um array de personagens:

 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


Dim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\northwind.mdb"

conn = New OleDbConnection(strcon)

Dim cmd As New OleDbCommand("select FirstName, BirthDate, City, Country , photo from Employees", conn)


Try

   cmd.Connection.Open()

Catch ex As System.Data.OleDb.OleDbException

   conn.Close()

   MsgBox("ERRO : " & ex.Message)

End Try
 

Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

 

While dr.Read()

  lista(i) = New ListaPersonagens

  lista(i).nome = dr.Item(0)

  lista(i).nascimento = dr.Item(1)

  lista(i).cidade = dr.Item(2)

  lista(i).pais = dr.Item(3)

  lista(i).foto = dr.Item(4)

  i = i + 1

End While


dr.Close()

conn.Close()

End Sub

Perceba que eu usei a instrução SQL - "Select FirstName, BirthDate, City, Country , photo from Employees"

Desta forma ao ler a base de dados usando o DataReader : dr.item(0) refere-se ao nome , dr.item(1) ao nascimento e assim por diante.

Ao percorrer o objeto DataReader - dr - para cada item eu cria um a nova instância da classe ListaPersonagens e atribuo os valores obtidos da tabela Employees ao objeto criado.

Ao final no evento Scroll , que ocorre quando o usuário move a guia do controle trackbar, estou obtendo a posição da guia e exibindo os valores correspondente ao índice referente ao objeto em  memória.

 Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trackPersonagens.Scroll
        'lista vai de 0 a 8 e portanto devemos descontar uma unidade 
        'pois o trackbar vai de 1 a 9
        Dim posicao As Int16 = trackPersonagens.Value - 1

        ' baseado no indice atual , retorna os valores
        ' para os dados e os exibe no formulário
        txtNome.Text = lista(posicao).nome
        txtNascimento.Text = lista(posicao).nascimento.ToString()
        txtCidade.Text = lista(posicao).cidade
        txtPais.Text = lista(posicao).pais
        imgPersonagem.Image = Drawing.Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory() & "\" & lista(posicao).foto)
    End Sub

O código - System.AppDomain.CurrentDomain.BaseDirectory() - retorna a pasta bin do diretório da aplicação , logo eu copiei as imagens para esta pasta.

Para exibir a imagem no controle pictureBox estou usando Drawing.Image.FromFile(imagem).

O resultado final ao executar o projeto será:

É claro que as imagens nada tem a ver com os dados obtidos , fiz isto apenas para ilustrar o exemplo.

Você pode melhorar o código definindo o tamanho do array de acordo com a quantidade de registros obtidos no DataReader.

Eu sei é apenas VB.NET , mas eu gosto ....


José Carlos Macoratti