VB.NET - Criando um formulário de Login


Neste artigo eu vou mostrar como criar um formulário de login no VB.NET. Dependendo do tipo do seu projeto a maneira de implementar a tarefa pode ser diferente o que importa é que irei abordar alguns conceitos básicos que podem complicar a vida de quem esta migrando para o VB.NET.

Neste artigo irei mostrar como :

Os requisitos do projeto são :

O projeto deverá possuir três formulários , um módulo e dois botões de comando:

  1. form1.vb - o formulário de login. (Deverá possuir um ícone pertinente a segurança).
  2. form2.vb - o formulário do usuário
  3. form3.vb - o formulário do administrador
  4. module1.vb - local onde iremos declarar a variável pública - formularioAtual como do tipo Windows.Form
  5. button1 - botão de comando  com o texto - Cancela
  6. button2 - botão de comando com o texto - OK

Os formulários form2.vb e form3.vb deverão possuir um menu com duas opções : Log off e Sair.

O formulário de login - form1.vb - deverá exibir duas caixas de texto e uma caixa de combinação:

Abaixo temos os três formulários :

 

form1.vb form2.vb form3.vb

O banco de dados Access 2000 usado terá o nome de Acesso.mdb e possuirá duas tabelas :  admin e usuarios. A estrutura das tabelas são iguais e é mostrada abaixo:

tabela : admin tabela : usuarios

- Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : Login
  4. Location : c:\vbnet\login

Inclua um módulo no seu projeto no menu Project|Add Module e insira o seguinte código no arquivo module1.vb:

Module Module1
    Public formularioAtual As System.Windows.Forms.Form
End Module

Este código garante que a variável formularioAtual será visível no projeto . Como você verá mais adiante vamos precisar que assim seja.

Clique duas vezes no formulário form1.vb e declare as variáveis conforme a figura abaixo .

Neste código temos as seguintes variáveis:

No evento Load do formulário form1.vb ponha o seguinte código:

'Carrega o formulario Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  'String de conexao

   conexao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Replace(Application.StartupPath, "bin", "") & "Acesso.mdb;Mode=ReadWrite;Persist Security Info=False"


   verificaChaveSenhaComando.Connection = conexao

   verificaChaveSenhaComando.CommandType = CommandType.Text

   verificaChaveSenhaComando.CommandText = "Select * From admin Where usuario=? and senha=?"
 

   verificaChaveSenhaComando2.Connection = conexao

   verificaChaveSenhaComando2.CommandType = CommandType.Text

   verificaChaveSenhaComando2.CommandText = "Select * From usuarios Where usuario=? and senha=?"


End
Sub

Estamos declarando a string de conexão para acesso a fonte de dados Acesso.mdb. Perceba que estamos usando o comando replace em - Replace(Application.StartupPath, "bin", "") - Aqui estamos substituindo a string 'bin' por uma string vazia do caminho de inicio da aplicação.
Como no meu caso o caminho de início é  : D:\vbnet\login_net\Login\bin"  ele será alterado para  "D:\vbnet\login_net\LoginBox\" que é o local onde esta minha base de dados Acesso.mdb.

Depois estou montando o objeto command definindo a conexão , o tipo de comando e o texto do comando que a instrução SQL parametrizada para o login do usuário e do administrador.

   verificaChaveSenhaComando.Connection = conexao

   verificaChaveSenhaComando.CommandType = CommandType.Text

   verificaChaveSenhaComando.CommandText = "Select * From admin Where usuario=? and senha=?"
 

No evento Click do botão de comando - Button2 - que é o botão OK , vamos colocar o código abaixo:
 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

'se o textbox1 esta em branco...


If
TextBox1.Text.Trim = ""
Then

  MessageBox.Show("Informe a sua Chave !","Chave", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

  TextBox1.Focus()

Exit Sub

End If


'se o textbox2 esta em branco...

If TextBox2.Text.Trim = "" Then

  MessageBox.Show("Informe a sua senha !", "Senha", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

  TextBox2.Focus()

  Exit Sub

End If


'se a combobox esta em branco

If ComboBox1.Text.Trim = "" Then

   MessageBox.Show("Selecione o modo de Login : Admin ou Usuário !", "Login", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

   ComboBox1.Focus()

   Exit Sub

End If

 

Aqui estou verificando se as caixas de texto e a caixa de combinação estão vazias e exibindo mensagens ao usuário para estes casos.

Para permitir somente valores não numéricos para a Chave do Usuário na caixa de texto - TextBox1 - inclua o código abaixo no evento KeyPress da mesma.

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

If Char.IsNumber(e.KeyChar) Then

     e.Handled = True

End If

End Sub

Para permitir somente valores numéricos na Senha do usuário na caixa de texto - TextBox2 - insira o código abaixo no evento KeyPress:

Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

'so numeros e backspace

If Char.IsLetter(e.KeyChar) Then

    e.Handled = True

End If

End Sub

Nota: você poderia usar também o código abaixo , mas ele não permite a entrada do BackSpace também:

'so numero sem backspace
If e.KeyChar.IsNumber(e.KeyChar) = False Then

 e.Handled = True

End If

 

Permitindo somente caracteres em caixa alta:

E se você quiser que na caixa de texto da chave - TextBox1 - sejam permitidos somente caracteres maiúsculos ?

No VB6 você teria que usar código no evento KeyPress para converter os caracteres informados em caixa alta.

No VB.NET basta você configurar a propriedade CharacterCasing como Upper. Conforme indica a figura abaixo.

No evento KeyDown de cada uma das caixas de texto vamos colocar um código que muda o foco para o próximo controlo quando o usuário teclar ENTER e que encerre a aplicação se o usuário pressionar ESC.

Private Sub textbox1_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As _

System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown


Dim
KeyCode As Short = eventArgs.KeyCode


' teclou ENTER põe o foco no próximo controle

If KeyCode = System.Windows.Forms.Keys.Return Then

    TextBox2.Focus()

End If

'se teclar ESC sai

If KeyCode = System.Windows.Forms.Keys.Escape Then

   End

End If
 

End Sub
 


Private Sub textbox2_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As _

System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
 

Dim KeyCode As Short = eventArgs.KeyCode
 

If KeyCode = System.Windows.Forms.Keys.Return Then

    Button2.Focus()

End If
 

If KeyCode = System.Windows.Forms.Keys.Escape Then

   End

End If
 

End Sub

 

Ao selecionar o tipo de login que irá fazer , como usuário ou administrador, iremos verificar a senha e senha em tabelas diferentes conforme a escolha. Vejamos o código para login como administrador:

'logando como Admin

If ComboBox1.SelectedIndex = 0 Then
 

verificaChaveSenhaComando.Parameters.Add("usuario", Data.OleDb.OleDbType.Variant)

verificaChaveSenhaComando.Parameters.Add("senha", Data.OleDb.OleDbType.Variant)

verificaChaveSenhaComando.Parameters("usuario").Value = TextBox1.Text

verificaChaveSenhaComando.Parameters("senha").Value = TextBox2.Text


'Abre conexao com banco de dados

conexao.Open()


' Le a informação do banco de dados

Read = verificaChaveSenhaComando.ExecuteReader

verificaLogin()


' fecha a conexao com o banco de dados

conexao.Close()


End
If

Agora o login feito como usuário:

'logando como usuario

If ComboBox1.SelectedIndex = 1 Then
 

verificaChaveSenhaComando2.Parameters.Add("usuario", Data.OleDb.OleDbType.Variant)

verificaChaveSenhaComando2.Parameters.Add("senha", Data.OleDb.OleDbType.Variant)

verificaChaveSenhaComando2.Parameters("usuario").Value = TextBox1.Text

verificaChaveSenhaComando2.Parameters("senha").Value = TextBox2.Text

 

'Abre a conexao com o banco de dados

conexao.Open()


' Le a informação do banco de dados

Read = verificaChaveSenhaComando2.ExecuteReader


verificaLogin()

' fecha a conexao com o banco de dados


conexao.Close()


End
If

 

Em ambos os casos o procedimento é o mesmo:

- Recebo os parâmetros - usuario e senha - que contém a chave e senha do usuário informada no formulário
- Abro a conexão
- Executo o comando usando o DataReader ( O DataReader é mais leve que usar um DataSet )
- Chamo a rotina - verificaLogin() - que faz verificação da chave e senha.
- Fecho a conexão

O código da rotina - verificaLgin() - é :

Private Sub verificaLogin()


With
Read

If .Read Then

 MessageBox.Show("Acesso permitido ! Bem Vindo """ & TextBox1.Text & """", "Login", MessageBoxButtons.OK, MessageBoxIcon.Information)

    If ComboBox1.SelectedIndex = 0 Then

          Me.Hide()

          'Ponha seu formulario aqui

          formularioAtual = New Form2()

          formularioAtual.Show()

    ElseIf ComboBox1.SelectedIndex = 1 Then

         Me.Hide()

         'Ponha seu formulario aqui

         formularioAtual = New Form3()

         formularioAtual.Show()

    End If

Else

   tentativas += 1

   If tentativas >= 3 Then

       MessageBox.Show("Número de tentativas foi excedido !", "Login", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

      'Fecha aplicação

       End

    Else

       TextBox1.Clear()

       TextBox2.Clear()

       MessageBox.Show("Chave ou senha inválida !", "Login", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End If

End If
 

TextBox1.Focus()


End
With

End Sub

 

Se a chave e a senha conferem eu escondo o formulário atual e , usando a variável global , formulárioAtual cria uma nova instância do formulário que eu desejo mostrar conforme o login efetuado (usuario ou admin) e exibo em seguida o formulário.

Ocorrendo mais de três tentativas a aplicação será encerrada.

No menu do formulário - form2.vb e form3.vb - iremos colocar o código que irá encerrar a aplicação se o usuário clicar em Sair e voltar a exibir o formulário de login - form1.vb - se o usuário clicar em - Log off:

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

   Me.Hide()

   formularioAtual = New Form1()

   formularioAtual.Show()

End Sub


Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click

  End

End Sub

Se o login for bem sucedido exibimos também uma mensagem de boas vindas. Abaixo o resultado da execução de um login bem sucedido:

Pegue o código completo : aqui

Eu sei , é apenas VB .NET , mas eu gosto ...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti