 Gerenciando dados sem usar banco de dados 
- III
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.Click SalvaCarroAtual() 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.Click carros.RemoveAt(posicaoAtual)If posicaoAtual = 0 Then posicaoAtual += 1Else posicaoAtual -= 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 procuraCarro f.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 = iEnd If Next End Sub Private 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:
| ImportsSystem ImportsSystem.Collections.Generic ImportsSystem.ComponentModel ImportsSystem.Data ImportsSystem.Drawing ImportsSystem.Linq ImportsSystem.Text ImportsSystem.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> 
 PublicClass frmProcura ' inclui um delegatePublic 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 carros Public 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 bd ListBox1.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 carroDim 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 Sub EndClass 
 '''<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> PublicClass 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 = valueEnd Set End Property 
 EndClass | 
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 Then posicaoAtual -= 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 Sub End 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 alta txtNome.SelectedText =Char.ToUpper(e.KeyChar) e.Handled =True End If End 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
 
colecaoCarros.zip
Eu sei , é apenas VB .NET , mas eu gosto..
referências:
José Carlos Macoratti