Gerenciando dados sem usar banco de
dados - II
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.
![]() |
Vamos aproveitar o formulário form1.vb criado por padrão quando da criação da solução para criar a interface com o usuário.
A partir da caixa de ferramentas inclua os componentes MenuStrip e ToolStrip no formulário alterando a propriedade name para mnuCarros e tsbCarros respectivamente;

O componente MenuStrip , mnuCarros, iremos criar o menu conforme a figura abaixo contendo as seguintes opções:

No componente ToolStrip vamos incluir os ícones referente as principais opções; para isso clique com o botão direito sobre o item e selecione Set Image;
A Seguir na janela Select Resource selecione Local Resource e clique no botão Import selecionando o ícone correspondente;
![]() |
![]() |
Com isso já temos parte da interface criada falta definir o código referente a cada opção, as variáveis que iremos usar no projeto e outros detalhes a nível de código. Vamos completar o leiaute do formulário incluindo 3 controles TextBox, 1 combobox , 1 datetimepicker , um Picturebox e um Button conforme a figura abaixo:

Para facilitar o entendimento e a manutenção vamos agrupar o código em regiões usando o recurso Region. Para isso digite #Region seguido do nome da região entre Aspas: #Region "Membros" e tecle Enter. Desta forma , para iniciar vamos criar 3 regiões definidas como :
Abaixo temos uma visão do código contendo as regiões criadas;
![]() |
Na região Construtor iremos usar o evento Load do formulário para iniciar uma lista de carros, definir a data do registro como a data de hoje , posição atual como zero e o estado como False;
|
Private
Sub
frmPrincipal_Load(ByVal sender As
Object, ByVal e As System.EventArgs) Handles Me.Load
' cria uma nova lista de
carros
' pronta para escrever
dados
carros = New List(Of Carros)()carroAtual = New Carros()carros.Add(carroAtual) dtpRegistro.Value = DateTime.Now ' inicia a posi‡Æo atual posicaoAtual = 0 ' marca o form como False flagForm = False End Sub |
Na Region ManutencaoCarros iremos definir as diversas rotinas referente as opções do menu : Novo, Abrir, Salvar, Salvar Como e Sair.
Veja abaixo a figura para o código definido na Region "ManutencaoCarros", perceba como temos um código organizado, com uma breve descrição facilitando assim a sua manutenção:
![]() |
Eu não vou exibir aqui o código para cada uma das rotinas vejamos então a rotina para definir a imagem do carro que é executada quando o usuário clica no botão - Define Imagem:
|
''' <summary>
''' Carrega imagem para o picture
box
''' </summary>
''' <param
name="sender"></param>
''' <param
name="e"></param>
''' <remarks></remarks>
Private
Sub
btnDefineImagem_Click(ByVal sender As
System.Object, ByVal
e As
System.EventArgs) Handles
btnDefineImagem.Click flagForm = True Dim imageFilePath As String = String.Empty Dim OpenFileDialog1 As New OpenFileDialog()
OpenFileDialog1.Filter = "JPEG Documents (*.jpg)|*.jpg|Gif Files|*.gif"
'se o usuário cancelar a operação retorna If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.Cancel Then Return End If
'obtem o nome do arquivo selecionado imageFilePath = OpenFileDialog1.FileName
If String.IsNullOrEmpty(imageFilePath) Then Return End If
Try ' converte Imagem para um byte array e salva Dim fsImage As FileStream = Nothing fsImage = File.Open(imageFilePath, FileMode.Open, FileAccess.Read)
fsImage.Read(bArrImage, 0, Convert.ToInt32(fsImage.Length)) fsImage.Close() '' Imagem e NomeImagem são membros de Carros carroAtual.Imagem = bArrImage carroAtual.NomeImagem = imageFilePath Dim ms As New MemoryStream(bArrImage) picFoto.Image = Image.FromStream(ms) ms.Dispose() Catch ex As ExceptionMessageBox.Show(ex.Message, "Erro ao armazenar imagem") End Try End Sub |
A rotina para salvar os dados informados no formulário, acionada quando o usuário clica na opção Salvar, usando o método Serialize da classe Serializador, para um arquivo texto definido com a extensão .car pode ser visto a seguir:
|
Private
Sub
SalvarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
SalvarToolStripMenuItem.Click
SalvaCarroAtual() If String.IsNullOrEmpty(caminhoArquivoAtual) Then Dim SaveFileDialog1 As New SaveFileDialog() Try SaveFileDialog1.Title = "Salva documento CAR"SaveFileDialog1.Filter = "CAR Documentos (*.car)|*.car"
Return End If Catch Return End Try caminhoArquivoAtual = SaveFileDialog1.FileName End If If String.IsNullOrEmpty(caminhoArquivoAtual) Then MessageBox.Show( "O caminho nÆo esta definido.", "Erro")Return End If Serializador.Serialize(caminhoArquivoAtual,
carros) MessageBox.Show( "Arquivo " + caminhoArquivoAtual + " salvo.", "Salvo")flagForm = FalseEnd Sub |
A rotina SalvaCarroAtual() apenas verifica se o nome do carro foi informado e obtém os dados do formulário para o array:
|
Private Sub SalvaCarroAtual()If Not String.IsNullOrEmpty(txtNome.Text) Then Try carroAtual.NomeCarro = txtNome.Text carroAtual.Marca = cboMarca.Text carroAtual.Modelo = txtModelo.Text carroAtual.Detalhes = txtDetalhes.Text carroAtual.dataRegistro = dtpRegistro.Value ' o byte array da imagem do carro ‚ definida ' via botÆo de comando Catch ex As Exception MessageBox.Show(ex.Message, "Erro") End Try End If End Sub |
Vamos agora criar a classe que irá ser usada para serializar e deserializar os dados na aplicação.
A primeira coisa a fazer é clicar com o botão direito do mouse sobre o nome do projeto e selecionar as opções Add -> Class ;
A seguir informe Serializador.vb como nome da classe e clique em Add;
A seguir vamos definir dois métodos estáticos :
|
Imports SystemImports System.Collections.GenericImports System.TextImports System.IOImports System.CollectionsImports System.Runtime.Serialization.Formatters.BinaryImports System.Runtime.Serialization
Public Shared Sub Serialize(ByVal strPath As String, ByVal mArquivo As List(Of Carros))
Dim formatador As BinaryFormatter = New BinaryFormatter() Try formatador .Serialize(fs, mArquivo) fs.Close() Catch ex As SerializationExceptionMessageBox.Show(ex.Message + ": " + ex.StackTrace, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub'----------------------------------------------------------------------------------------------------------------- Public Shared Function Deserialize(ByVal strPath As String) As List(Of Carros) Dim fs As FileStream = New FileStream(strPath, FileMode.Open) Dim mArquivo As New List(Of Carros)()
Try Dim Formatter As New BinaryFormatter()mArquivo = Formatter.Deserialize(fs) fs.Close() Return mArquivo Catch ex As SerializationException MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error) Return mArquivo End Try End FunctionEnd Class |
Já temos as rotinas para salvar as informações e abrir o arquivo de dados , com isso , já podemos testar nossa aplicação informando alguns dados e salvando-os em um arquivo .car;
Abaixo temos a figura onde os dados informados foram salvos em um arquivo chamado carros.car. Para ter acesso as informações basta selecionar no menu a opção Arquivo->Abrir;

Na última parte deste arquivo irei criar as rotinas para incluir, excluir e navegar pelos registros do arquivo salvo.
Veja a continuação do artigo em : Gerenciando dados sem usar banco de dados - III
Eu sei , é apenas VB .NET , mas eu gosto..![]()
referências:
José Carlos Macoratti