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:
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.)
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.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=?"
|
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
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) Thene.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
If KeyCode = System.Windows.Forms.Keys.Return Then TextBox2.Focus()
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 End End IfEnd 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
|
Agora o login feito como usuário:
'logando como usuario If ComboBox1.SelectedIndex = 1 Then
|
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()
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 Elsetentativas += 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 IfTextBox1.Focus()
|
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.ClickMe.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: