FORM NAO DESCARREGA

AUGUSTTO 28/09/2009 20:53:12
#323903
Tenho um form de Login após o login eu queria fechar este form e abrir o form principal que contem os menus

eu fiz desse jeito:

Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
Dim sql As String = [Ô]Select Usuario, Senha from Usuarios where Usuario = @Usuario and Senha = @Senha[Ô]
Dim Conexao As New SqlConnection(StringConexao)
Dim Comando As New SqlCommand(sql, Conexao)
Dim reader As SqlDataReader


Conexao.Open()
Comando.Parameters.Clear()
Comando.Parameters.AddWithValue([Ô]@Usuario[Ô], UsernameTextBox.Text)
Comando.Parameters.AddWithValue([Ô]@Senha[Ô], PasswordTextBox.Text)
reader = Comando.ExecuteReader()
reader.Read()


If UsernameTextBox.Text <> String.Empty And PasswordTextBox.Text <> String.Empty Then
If reader.HasRows = True Then
If UsernameTextBox.Text = reader([Ô]Usuario[Ô]).ToString() And PasswordTextBox.Text = reader([Ô]Senha[Ô]).ToString() Then

If reader([Ô]Usuario[Ô]).ToString() = [Ô]Administrador[Ô] Then
My.Forms.frmMenu.btnSeguranca.Enabled = True
Else
My.Forms.frmMenu.btnSeguranca.Enabled = False
End If
Me.Close()
usuario = reader([Ô]Usuario[Ô]).ToString()
My.Forms.frmMenu.Show()
Else
MessageBox.Show([Ô]Usuário Senha ou Inválido, Verifique com o Administrador[Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
UsernameTextBox.Text = [Ô][Ô]
PasswordTextBox.Text = [Ô][Ô]
End If
Else
MessageBox.Show([Ô]Usuário Senha ou Inválido, Verifique com o Administrador[Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
UsernameTextBox.Text = [Ô][Ô]
PasswordTextBox.Text = [Ô][Ô]
End If
Else
MessageBox.Show([Ô]Usuário em Branco ou Senha em Branco[Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End If

reader.Close()
Conexao.Close()
End Sub

Qdo eu dou um Me.Close() ele até descarrega e chama o form Principal mas esse também fecha, tentei com o Me.Dispose() e acontece o mesmo
JWCELYO 29/09/2009 12:54:57
#323965
é verdade isso acontece porque o seu form login é form principal da sua aplicação

[txt-size=2]1 º Solução[/txt-size]
uma das melhores soluções para o seu caso seria deixa o form Menu como principal
assim quando sua aplicação executada carregaria inicialmente form menu e form Menu
com enveto load chamaria form login para autenticação do cliente.



[txt-size=2]2 º Solução[/txt-size]
outra solução é usar esse codigo
abaixo no form login

[ô] esconder form
MyBase.ShowIcon = False
MyBase.ShowInTaskbar = False
MyBase.FormBorderStyle = Windows.Forms.FormBorderStyle.None
MyBase.TransparencyKey = MyBase.BackColor


[ô] mostrar o form
MyBase.ShowIcon = true
MyBase.ShowInTaskbar = True
MyBase.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
MyBase.TransparencyKey = Color.BurlyWood




RICART 29/09/2009 15:20:33
#323982
O que está ocorrendo é que sua aplicação está configurada para encerrar quando o primeiro form (startup) for fechado.
Va nas propriedades do projeto e altere a opção para:
ShutDown Mode: When Last form closes

O que está ocorrendo é que está selecionado: When startup form closes.

Ou seja, sempre que vc fechar o form de logon, sua aplicação será encerrada. Mudando para a opção que estou lhe sugerindo, o encerramento somente se dará após fechar o último form que estiver aberto.


Veja o anexo.
MORDOR 29/09/2009 15:37:33
#323985
Resposta escolhida
A solução é você trabalhar com a opção [Ô]Application Events[Ô] que o VB.NET disponibiliza. Nessa janela de propriedades do projeto, clique em [Ô]View Application Events[Ô] que uma nova classe será criada para tratar esses eventos. Nela basta fazer assim.

Namespace My

Partial Friend Class MyApplication

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
If LoginForm.ShowDialog() <> DialogResult.OK Then
e.Cancel = True [ô]Impede a inicialização se o Login falhou
End If
End Sub
End Class

End Namespace



Nessa mesma janela de propriedades defina o Form principal o seu frmMenu. No Form de login, defina a propriedade AcceptButton para esse botão btnOk que autentica o usuário. Nessa rotina se o login for feito com sucesso basta definir [Ô]DialogResult = DialogResult.OK[Ô] que o Form de autenticação fechará e abrirá o principal.

Veja no anexo o exemplo como é simples.
LEVII 30/09/2009 10:46:28
#324046
SE O SEU FORM NAO DESCARREGA...

CONHECO UM BOM PAI DE SANTO QUE FAZ UM OTIMO [Ô]DESCARREGO[Ô]...
SE QUISER...
AUGUSTTO 06/10/2009 21:59:01
#324651
MORDOR
Seu exemplo deu certo aqui só não entendi isso: e.Cancel = True o é o form login?

RICART
A sua dica não deu certo ,mas eu entendi esses lance dos forms

JWCELYO
Ainda não testei o seu exemplo
MORDOR 06/10/2009 22:26:36
#324654
Citação:

AUGUSTTO escreveu:
MORDOR
Seu exemplo deu certo aqui só não entendi isso: e.Cancel = True o é o form login?



[Ô]e.Cancel = True[Ô] é em relação a inicialização do programa. Você está modificando o valor dessa propriedade no parâmetro [Ô]e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgS[Ô] dessa função. Ele vai ser verificado por baixo dos panos quando sair dela e conforme o valor a aplicação inicia abrindo o Form que você definiu como inicial nas propriedades do projeto.

Se [Ô]LoginForm.ShowDialog()[Ô] for diferente de [Ô]DialogResult.OK[Ô] você impede que a inicialização continue, abrindo o Form principal. Pra manter o Form de login aberto caso o usuário digite a senha errada você retorna DialogResult.None. Se ele fechar pelo botão na barra de títulos ou der [Ô]ALT+F4[Ô] vai cair nessa condição e o programa encerra. Isso funciona quase como o [Ô]Sub Main[Ô] só que te dá essa opção de trabalhar com o Application Framework. Resumindo fica assim:

/----> DialogResult = DialogResult.OK ----> Abre o Form principal definido nas propriedades do projeto
MyApplication_Startup ----> Exibe o FormLogin ----> DialogResult = DialogResult.None ----> Form de login permanece aberto
\----> DialogResult <> DialogResult.OK ----> e.Cancel = True e encerra o programa
Tópico encerrado , respostas não são mais permitidas