Gerenciando dados sem usar banco de dados - III
Em continuação ao meu artigo VB .NET - Gerenciando dados sem usar um banco de dados vamos criar a classe para serializar e deserializar os dados da coleção carros e o formulário principal.
Nota: Este artigo mostra como persistir, recuperar e localizar informações usando a serialização.
Abaixo vemos a figura do formulário principal exibindo o menu com as opções do sistema.
Neste momento vamos dar uma olhada no projeto para ver o que foi criado:
Temos as Regions :
Criamos também dois novos formulários :
O código do formulário frmLista.vb é dado a seguir e apenas exibe os carros cadastrados:
Public
Sub
New(ByVal
bd As List(Of
Carros))
End Sub |
O código da Region CRUD é dado a seguir, e nele já vemos comentados os códigos relacionados com os botões incluir, excluir
''' <summary> ''' Inclui um novo carro a lista de carros ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub tsbIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbIncluir.ClickSalvaCarroAtual() carroAtual = New Carros()LimpaFormulario() carros.Add(carroAtual) flagForm = True End Sub ''' <summary> ''' Remove o carro atual dos dados ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub tsbExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbExcluir.Clickcarros.RemoveAt(posicaoAtual) If posicaoAtual = 0 ThenposicaoAtual += 1 ElseposicaoAtual -= 1 carroAtual = carros(posicaoAtual) carregaCarroAtual() flagForm = True End If End Sub''' <summary> ''' Localiza um carro especifico ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub tsbProcurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbProcurar.Click Dim f As New frmProcura(carros) AddHandler f.CarroNomeUpdated, AddressOf procuraCarrof.Show() End Sub''' <summary> ''' Codigo para localizar carros ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub ProcuraCarro(ByVal sender As Object, ByVal e As CarroNomeUpdateEventArgs) Dim i As Integer For i = 0 To carros.Count - 1 If carros(i).NomeCarro = e.CarroNome Then carroAtual = carros(i) carregaCarroAtual() posicaoAtual = i End If Next End SubPrivate Sub ListaDeCarrosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListaDeCarrosToolStripMenuItem.Click Dim f As New frmLista(carros) f.Show() End Sub
|
Deste código quero destacar o código referente ao botão localizar. Neste código estamos instanciando o formulário frmProcurar(carros) passando como parâmetro o objeto Carros.
Vejamos a seguir o código do formulário frmProcurar.vb:
Imports SystemImports System.Collections.GenericImports System.ComponentModelImports System.DataImports System.DrawingImports System.LinqImports System.TextImports System.Windows.Forms
''' <summary>''' Este formulario exibe uma lista de nomes de carros ''' uma vez selecionado um evento sera disparado com o nome ''' do carro selecionado e passado como um argumento. ''' O formulario principal ir 'escutar' para processar este evento ''' para atualizar a exibi‡Æo do carro atual de forma que ele coincida com o ''' nome procurado. ''' </summary>
Public Class frmProcura' inclui um delegate Public Delegate Sub CarroNomeUpdateHandler(ByVal sender As Object, ByVal e As CarroNomeUpdateEventArgs) ' e associa um evento para modificar os escutadores ' quando o nome do carro ‚ selecionado da lista dos ' nomes de carrosPublic Event CarroNomeUpdated As CarroNomeUpdateHandler ''' <summary> ''' Passa a lista de dados do carro atual para ''' o construtor de forma que o formulario pode ''' gerar uma lista de nomes de carros para o usuario escolher ''' no formulario ''' </summary> ''' <param name="bd"></param> ''' <remarks></remarks>Public Sub New(ByVal bd As List(Of Carros))
InitializeComponent() ' percorre os dados dos carros para incluir ' cada nome de carro a lista de nomes do controle listbox For Each carro As Carros In bdListBox1.Items.Add(carro.NomeCarro) Next End Sub''' <summary> ''' Quando o usu rio clicar no botÆo procurar ''' dispara um evento de forma que o formulario ira exibir ''' o carro apropriado ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub btnProcurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcurar.Click ' preenche a lista de argumentos com o nome do carro Dim args As New CarroNomeUpdateEventArgs(ListBox1.SelectedItem.ToString()) ' dispara o evento para passar o nome do carro de volta ' ao formulario principal para processamento RaiseEvent CarroNomeUpdated(Me, args) End SubEnd Class
''' <summary>''' Container para os argumentos de atualização do nome do carro ''' só ha um argumento neste caso. ''' O nome do carro selecionado da lista de carros ''' </summary>Public Class CarroNomeUpdateEventArgs Inherits System.EventArgs
Private mCarroNome As String ' constructor Public Sub New(ByVal sCarroNome As String) Me.mCarroNome = sCarroNome End Sub' Properties - Acessivel pelo listener Public Property CarroNome() As String Get Return mCarroNome End Get Set(ByVal value As String) mCarroNome = value End Set End Property
End Class |
Observe que estamos um delegate e definindo no formulário um construtor e a propriedade mCarroNome que será retornada para o formulário Menu.vb de forma a exibir os dados do carro quando o usuário clica no botão Procurar do formulário frmProcura.vb:
Finalmente temos o código da Region Navegacao:
'''
<summary>
''' Navega para o
registro anterior se possivel
'''
</summary>
'''
<param name="sender"></param>
'''
<param name="e"></param>
'''
<remarks></remarks>
'''
Private
Sub tsbAnterior_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
tsbAnterior.Click
SalvaCarroAtual() If posicaoAtual <> 0 ThenposicaoAtual -= 1 carroAtual = carros(posicaoAtual) carregaCarroAtual() End If End Sub''' <summary> ''' Navega para o pr¢ximo registro ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub tsbProximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbProximo.Click
If posicaoAtual < (carros.Count - 1) Then posicaoAtual += 1 carroAtual = carros(posicaoAtual) carregaCarroAtual() End If End SubEnd Sub |
Vamos criar ainda uma ultima Region chamada MudaEstado onde iremos colocar o código relativo a mudança da variável FlagForm para True;
'''
<summary>
''' Muda o estado para de
FlagFrom sempre que o usu rio
''' digitar algo no
textbox nome do carro
'''
</summary>
'''
<param name="sender"></param>
'''
<param name="e"></param>
'''
<remarks></remarks>
Private
Sub txtNome_KeyPress(ByVal
sender As
System.Object,
ByVal e
As
System.Windows.Forms.KeyPressEventArgs) _
Handles
txtNome.KeyPress
flagForm =
True 'converte para caixa alta If Char.IsLower(e.KeyChar) Then 'Converte o texto para caixa altatxtNome.SelectedText = Char.ToUpper(e.KeyChar)e.Handled = True End IfEnd Sub
''' <summary> ''' Muda o estado para de FlagFrom sempre que o usu rio ''' clicar na combo Marca ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub cboMarca_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles cboMarca.MouseClick flagForm = True End Sub
''' <summary> ''' Muda o estado para de FlagFrom sempre que o usu rio ''' digitar no textbox modelo ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub txtModelo_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles txtModelo.KeyPress flagForm = True End Sub
''' <summary> ''' Muda o estado para de FlagFrom sempre que o usu rio ''' digitar algo no campo Detalhes ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub txtDetalhes_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles txtDetalhes.KeyPress flagForm = True End Sub
''' <summary> ''' Muda o estado para de FlagFrom sempre que o usu rio ''' sempre que o usu rio abrir o datetimePicker ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub dtpRegistro_CloseUp(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles dtpRegistro.CloseUp flagForm = True End Sub
''' <summary> ''' Dirty the form if the user ''' opens the dtp control ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub dtpTime_CloseUp(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles dtpTime.CloseUp flagForm = True End Sub
|
E com isso concluímos o nosso pequeno sistema para gerenciar uma coleção de carros sem usar um banco de dados, note que estamos persistindo texto e também a imagem do carro usando a serialização e os recursos da plataforma .NET. Com isso temos um sistema bem leve e apropriado para gerenciar informações de pequeno volume e sem muita complexidade.
Você pode incrementar o sistema usando o seu talento e eu espero que os conceitos abordados sejam úteis.
Pegue o projeto completo aqui : colecaoCarros.zip
Eu sei , é apenas VB .NET , mas eu gosto..
referências:
José Carlos Macoratti