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.OleDbA seguir no início do formulário declare as variáveis abaixo que serão usadas no projeto:
Dim
conn As OleDbConnectionDim 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
conn = New OleDbConnection(strcon) Dim cmd As New OleDbCommand("select FirstName, BirthDate, City, Country , photo from Employees", conn)
cmd.Connection.Open() Catch ex As System.Data.OleDb.OleDbException conn.Close() MsgBox("ERRO : " & ex.Message) End
Try
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
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