VB .NET - Curso Prático ADO .NET - Desenvolvendo uma aplicação : Definindo o código da Interface - XII (Final do módulo cliente)
Nesta última aula do curso prático ADO .NET usando VB .NET irei tratar do formulário de registro - frmRegistros - que é usado para cadastrar um cliente na tabela Clientes base de dados a empresa CiaFilmes.
O formulário de registros - frmRegistros - permite registrar as informações do cliente que serão usadas para fazer e finalizar um pedido. Assim seus dados pessoais e os dados do cartão de crédito deverão ser informados bem como o login e a senha para que o cliente possa finalizar um pedido feito. Sem fazer o registro o cliente pode simular um pedido mas não poderá finalizá-lo.
Abaixo vemos o leiaute do formulário de registro - frmRegistros:
Este formulário utiliza as seguintes declarações imports que permite o acesso as classes ADO .NET e ao provedor para o SQL Server:
Imports
System.Data
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
No evento Load do formulário definimos o valor zero para a propriedade SelectedIndex da combobox de forma a exibir o primeiro item:
Private Sub frmRegistros_Load(sender As Object, e As EventArgs) Handles MyBase.Load cboEstados.SelectedIndex = 0 End Sub |
Associado ao botão de comando Submeter do formulário temos o código que irá realizar a validação dos dados informados e a gravação das informações na tabela Clientes. Abaixo temos o código:
Private Sub btnSubmeter_Click(sender As Object, e As EventArgs) Handles btnSubmeter.Click Dim strConsulta As String Dim sqlCon As New SqlConnection(strConexaoSQLServer) Dim sqlAda As New SqlDataAdapter() 'valida os dados informados 'verifica se foi informado o nome do cliente If (txtNome.Text.Trim = "") Then 'exibe mensagem ao cliente para informar o nome MessageBox.Show("Informe o primeiro nome.", "Nome", MessageBoxButtons.OK) 'poe o foco no TextBox txtNome txtNome.Focus() Return End If If (txtSobrenome.Text.Trim = "") Then MessageBox.Show("Informe o sobrenome.", "Sobrenome", MessageBoxButtons.OK) txtSobrenome.Focus() Return End If If String.IsNullOrEmpty(txtEndereco.Text) Then MessageBox.Show("Informe o endereço.", "Endereço", MessageBoxButtons.OK) txtEndereco.Focus() Return End If If Not IsEmail(txtEmail.Text) Then MessageBox.Show("Email inválido.", "Email", MessageBoxButtons.OK) txtEmail.Focus() Return End If If (txtCartaoCredito.Text.Trim = "") Then MessageBox.Show("Informe o número do cartão de crédito.", "Cartão de Crédito ", MessageBoxButtons.OK) txtCartaoCredito.Focus() Return ElseIf (txtCartaoCredito.Text.Trim.Length <> 16) Then MessageBox.Show("Número de cartão de crédito inválido. Informe o número novamente.", "Cartão de Crédito", MessageBoxButtons.OK) txtCartaoCredito.Focus() Return End If If String.IsNullOrEmpty(txtValidadeCartao.Text) Then MessageBox.Show("Dados inválidos", "Validade do Cartão de Crédito", MessageBoxButtons.OK) txtValidadeCartao.Focus() Return End If If String.IsNullOrEmpty(txtCodSeguranca.Text) Then MessageBox.Show("Dados inválidos", "Código de segurança do Cartão de Crédito", MessageBoxButtons.OK) txtCodSeguranca.Focus() Return End If 'Define a consulta para incluir detalheas informados na tabela - 'Note que as variávels usadas como parâmetros (variáveis que possuem o simbolo @) 'são usadas para atribuir valores os campos da tabela strConsulta = "INSERT INTO Clientes (Nome, Sobrenome, Endereco, Cidade,Estado, Cep, Telefone, Email, Nascimento, NumeroCartaoCredito, ValidadeCartao,CodigoSegurancaCartao,Login,Senha) " _ & " VALUES(@Nome,@Sobrenome,@Endereco,@Cidade,@Estado,@Cep,@Telefone,@Email,@Nascimento, @NumeroCartaoCredito,@ValidadeCartao,@CodigoSegurancaCartao,@Login,@senha)" 'Declar um objeto CmdString para o objeto Command Dim CmdString As New SqlCommand(strConsulta, sqlCon) 'Especifica a consulta armazeanda na variavel CmdString como a consulta a ser executada sqlAda.InsertCommand = CmdString 'Define os parâmetros, seus tipos, tamanhos e valores sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Nome", System.Data.SqlDbType.VarChar, 50, "Nome")) sqlAda.InsertCommand.Parameters(0).Value = txtNome.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Sobrenome", System.Data.SqlDbType.VarChar, 50, "Sobrenome")) sqlAda.InsertCommand.Parameters(1).Value = txtSobrenome.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Endereco", System.Data.SqlDbType.VarChar, 50, "Endereco")) sqlAda.InsertCommand.Parameters(2).Value = txtEndereco.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Cidade", System.Data.SqlDbType.VarChar, 50, "Cidade")) sqlAda.InsertCommand.Parameters(3).Value = txtCidade.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Estado", System.Data.SqlDbType.VarChar, 2, "Estado")) sqlAda.InsertCommand.Parameters(4).Value = cboEstados.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Cep", System.Data.SqlDbType.VarChar, 8, "Cep")) sqlAda.InsertCommand.Parameters(5).Value = txtCep.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Telefone", System.Data.SqlDbType.VarChar, 50, "Telefone")) sqlAda.InsertCommand.Parameters(6).Value = txtTelefone.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Email", System.Data.SqlDbType.VarChar, 100, "Email")) sqlAda.InsertCommand.Parameters(7).Value = txtEmail.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Nascimento", System.Data.SqlDbType.DateTime, 8, "Nascimento")) sqlAda.InsertCommand.Parameters(8).Value = Convert.ToDateTime(dtpNascimento.Text) sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@NumeroCartaoCredito", System.Data.SqlDbType.VarChar, 16, "NumeroCartaoCredito")) sqlAda.InsertCommand.Parameters(9).Value = txtCartaoCredito.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@ValidadeCartao", System.Data.SqlDbType.VarChar, 10, "ValidadeCartao")) sqlAda.InsertCommand.Parameters(10).Value = txtValidadeCartao.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@CodigoSegurancaCartao", System.Data.SqlDbType.VarChar, 10, "CodigoSegurancaCartao")) sqlAda.InsertCommand.Parameters(11).Value = txtCodSeguranca.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Login", System.Data.SqlDbType.VarChar, 50, "Login")) sqlAda.InsertCommand.Parameters(12).Value = txtLogin.Text sqlAda.InsertCommand.Parameters.Add(New SqlParameter("@Senha", System.Data.SqlDbType.VarChar, 50, "Senha")) sqlAda.InsertCommand.Parameters(13).Value = CifraDecifraSenha(txtSenha.Text) Try 'estabelece uma conexão sqlCon.Open() 'Executa a consulta sqlAda.InsertCommand.ExecuteNonQuery() Catch MyException As SqlException 'tratamento de erros MessageBox.Show(("Source: " & MyException.Source & ControlChars.Cr & "Number: " & MyException.Number.ToString() & ControlChars.Cr & "State: " & MyException.State.ToString() & ControlChars.Cr & "Class: " & MyException.Class.ToString() & ControlChars.Cr & "Server: " & MyException.Server & ControlChars.Cr & "Message: " & MyException.Message & ControlChars.Cr & "Procedure: " & MyException.Procedure & ControlChars.Cr & "Line: " & MyException.LineNumber.ToString())) CmdString.Dispose() Return Finally 'libera os recursos usados CmdString.Dispose() sqlCon.Dispose() sqlAda.Dispose() sqlCon.Close() Me.Close() End Try 'atribui o login Geral.clienteLogin = txtLogin.Text 'exibe mensagem MessageBox.Show("O registro foi incluído com sucesso.", "Cliente Registrado", MessageBoxButtons.OK, MessageBoxIcon.Information) 'fecha o formulario Me.Close() End Sub |
No código estamos verificando se as informações que o usuário digita nos controles de formulário TextBox são validas. Podemos realizar diversos níveis de verificação como não aceitar valores vazios, ou aceitar somente valores numéricos ou strings ou ainda permitir valores com um determinado tamanho de caracteres, etc.
No código verificamos se os controles TextBox não estão vazios, a seguir montamos a string SQL usando o comando INSERT INTO e passamos os valores aos parâmetros da consulta SQL que será executado com a instrução ExecuteNonQuery.
Podemos realizar a validação de diversas formas e uma delas é usar o controle ErrorProvider. Ele pode ser usado para realizar a validação dos dados em um formulário Windows. Basicamente o controle exibe um pequeno ícone vermelho ao lado do controle que apresenta um erro de validação e quando o usuário passa o mouse sobre o ícone uma mensagem é exibida com informação sobre o dado inválido. Opcionalmente você pode fazer o ícone piscar.
Para usar o controle temos que, a partir da ToolBox, selecionar o controle ErrorProvider e arrastá-lo para o formulário , ou clicar duas vezes sobre ele. Como o controle não é visível em tempo de execução ele fica na barra abaixo do formulário com o nome padrão de ErrorProvider1.
Para usar efetivamente o controle basta você definir no evento Validating de cada TextBox o código para efetuar a validação do conteúdo e opcionalmente exibir o ícone de erro.(Para validações complexas você pode até usar as expressões regulares).
O método SetError do controle atribui um erro ao controle . Para uma validação onde a entrada for considerada inválida você deve definir o método assim : errorProvider1.SetError(meuControle, "Texto com indicação de erro"); Para limpar o erro simplesmente passe uma string vazia como argumento.
Abaixo vemos o código associado ao evento Validating para os controles: TextCep, txtTelefone e txEmail onde realizamos a validação usando o ErrorProvider definido com o nome errPvd1:
Private Sub txtCep_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txtCep.Validating If String.IsNullOrWhiteSpace(txtCep.Text) Then errPvd1.SetError(txtCep, "Informe o CEP") Else errPvd1.SetError(txtCep, "") End If End Sub Private Sub txtTelefone_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txtTelefone.Validating If String.IsNullOrWhiteSpace(txtCep.Text) Then errPvd1.SetError(txtTelefone, "Informe o Telefone do cliente.") Else errPvd1.SetError(txtTelefone, "") End If End Sub Private Sub txtEmail_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txtEmail.Validating If String.IsNullOrWhiteSpace(txtCep.Text) Then errPvd1.SetError(txtEmail, "Informe o Email do Cliente.") Else errPvd1.SetError(txtEmail, "") End If End Sub |
A seguir temos o código associado ao evento KeyPress do formulário onde interceptamos a tecla ENTER e enviamos um TAB para navegar entre os campos:
Nota: A propriedade KeyPreview do formulário deverá ser definida como True para que
Private Sub frmRegistros_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress If Asc(e.KeyChar) = 13 Then SendKeys.Send("{TAB}") End If End Sub |
Ainda usando o evento KeyPress estamos permitindo somente valores numéricas para os controles txtCartaoCredito e txtCodSeguranca:
Private Sub txtCartaoCredito_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCartaoCredito.KeyPress If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack Then e.Handled = True End If End Sub Private Sub txtCodSeguranca_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCodSeguranca.KeyPress If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack Then e.Handled = True End If End Sub |
A função IsEmail abaixo verifica se o email informado no controle txtEmail possui um formato válido e retorna true ou false:
Function IsEmail(ByVal email As String) As Boolean Static emailExpression As New Regex("^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$") Return emailExpression.IsMatch(email) End Function |
A chamada da rotina LimpaControles é feita no evento Click do botão btnLimpar:
Private
Sub btnLimpar_Click(sender As Object, e As EventArgs)
Handles btnLimpar.Click LimpaControles() End Sub |
Para limpar todos os controles TextBox do formulário usamos a rotina LimpaControles() a seguir:
Private Sub LimpaControles() For Each txt As Control In Me.Controls If TypeOf txt Is TextBox Then txt.Text = "" End If Next End Sub |
No evento Click do botão Cancelar fechamos o formulário:
Private Sub btnCancelar_Click(sender As Object, e As EventArgs) Handles btnCancelar.Click Me.Close() End Sub |
Dessa forma concluímos o formulário de registro da aplicação.
Definindo a tela de apresentação
Para encerrar vamos incluir uma tela de apresentação no nosso projeto. Inclua um novo formulário via menu PROJECT->Add Windows Forms com o nome frmSplash.vb e defina as seguinte propriedades para este formulário:
Inclua um controle Label e atribua na sua propriedade Text o texto CiaFilmes com fonte Segoe Script; 36pt;
Inclua no formulário um controle PictureBox com as seguinte propriedades:
Veja abaixo o leiaute e aparência do formulário:
Após isso clique com o botão direito do mouse sobre o nome do projeto e acione a opção Properties:
Na janela Properties em Application informe o nome do formulário frmSplash na opção Splash Screen:
Pronto ao executar sua aplicação a tela de apresentação será apresentada por alguns segundos antes do formulário principal ser exibido.
O projeto completo você encontra no Super DVD .NET.
Veja os
Destaques e novidades do SUPER DVD VB 2013
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# 2013 com exclusivo material de suporte e vídeo aulas com curso básico sobre C#. |
Na próxima aula do curso iremos iniciar a criação do projeto referente ao módulo de administração onde somente os funcionários e o administrador terá acesso para realizar as tarefas de manutenção da aplicação como cadastros, relatórios e acompanhamento dos pedidos.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#