Usuário com melhor resposta
Como fazer um Logout saindo do frmMenuPrincipal e retonorando para o frmLogin - C#

Pergunta
-
Pessoal, confesso que estou apanhando feio... Tenho um form de Login e eu consegui implementar normalmente o Login...
Após digitar a senha abre o frmPrincipal:
Na classe Program.cs o código ficou assim:
/// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); frmLogin frm_Login = new frmLogin(); if (frm_Login.ShowDialog() == DialogResult.OK) { Application.Run(new frmMenuPrincipal()); } }
E no botão ENTRAR do frmLogin ficou assim:
this.DialogResult = DialogResult.OK;
Até aqui, tudo bem... Só que quando eu acesso o frmMenuPrincipal e preciso trocar de usuário (Logout), precisava fechar o frmMenuPrincipal e retornar ao frmLogin...
Como eu faço isso... Alguém sabe como me ajudar???
Abraço :)
- Editado JR-Master domingo, 14 de fevereiro de 2016 22:37
Respostas
-
Boa noite.
Acredito que a forma mais simple de fazer seja a seguinte: não defina um Form principal; trate o Application.Exit() diretamente pelo código.
Assim no Login tu podes verificar se o usuário está correto, instanciar e mostrar a tela principal e dar um this.Close(); mesma lógica funcionaria para o Form principal.
O restultado final ficaria algo do tipo:
Program.cs
[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FormLogin frmLogin = new FormLogin(); frmLogin.Show(); Application.Run(); }
Form de Login:
private void btnLogin_Click(object sender, EventArgs e) { // Valida se o usuário está correto e etc., caso esteja, executa o código a seguir FormDashboard frmDashboard = new FormDashboard(); frmDashboard.Show(); this.Close(); }
Form Principal:
private void btnLogout_Click(object sender, EventArgs e) { FormLogin frmLogin = new FormLogin(); frmLogin.Show(); this.Close(); } private void btnExit_Click(object sender, EventArgs e) { Application.Exit(); }
Att., Rafael Simor
- Marcado como Resposta JR-Master segunda-feira, 15 de fevereiro de 2016 14:30
Todas as Respostas
-
Boa noite.
Acredito que a forma mais simple de fazer seja a seguinte: não defina um Form principal; trate o Application.Exit() diretamente pelo código.
Assim no Login tu podes verificar se o usuário está correto, instanciar e mostrar a tela principal e dar um this.Close(); mesma lógica funcionaria para o Form principal.
O restultado final ficaria algo do tipo:
Program.cs
[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FormLogin frmLogin = new FormLogin(); frmLogin.Show(); Application.Run(); }
Form de Login:
private void btnLogin_Click(object sender, EventArgs e) { // Valida se o usuário está correto e etc., caso esteja, executa o código a seguir FormDashboard frmDashboard = new FormDashboard(); frmDashboard.Show(); this.Close(); }
Form Principal:
private void btnLogout_Click(object sender, EventArgs e) { FormLogin frmLogin = new FormLogin(); frmLogin.Show(); this.Close(); } private void btnExit_Click(object sender, EventArgs e) { Application.Exit(); }
Att., Rafael Simor
- Marcado como Resposta JR-Master segunda-feira, 15 de fevereiro de 2016 14:30
-
Bom dia Jalber,
No seu botão de logout, você pode chamar o seu form inicial da seguinte maneira:
private void btnLogout_OnClick(object sender, EventArgs e) { this.Hide(); Form2 frmPrincipal = new Form2(); frmPrincipal.Show(); //OU frmPrincipal.ShowDialog(); }
Usando o método HIDE, o código do evento do botão continua em execução normalmente, porém se você utilizar o método CLOSE o seu código para de ser executado.
Abs.
Bruno Destro
Dicas de programação em .net, C# e SQL - http://smcode.com.br/
-
-
Jalber, FormLogin e FormDashboard são os nomes que dei aos meus Form's; é só adaptar pros nomes dos teus Forms.
Edit: Aliás, cuidado com o Hide(), pois se tu ficares dando login e logout, os Forms ficarão em memória, ocupando espaço.
Att., Rafael Simor
- Editado SimorC segunda-feira, 15 de fevereiro de 2016 14:29
- Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:12
-
-
-
Jalber, podes até funcionar, mas da forma que falei é mais confiável.
Ao dar um Application.Restart() tu vais estar criando um novo processo, em algum momento o processo atual pode não fechar rápido o suficiente para permitir que o novo processo abra e também tu acabas perdendo um pouco a capacidade de customização; o programa pode dar problema se tu tratares o evento FormClosing, por exemplo.
Levando em conta que tu tens um FormPrincipal e um FormLogin para acessar este, é mais fácil trabalhar com o .Close() e com as instâncias.
Att., Rafael Simor
- Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:13
-
-
Rafael fiz tudo direitinho, mas está tendo um problema com o frmLogin... No botão Cancelar eu implementei com Application.Exit().... e quando clicado encerra a aplicação.... BLZ!!
Só que quando clico no botão X ( Fechar) A aplicação fica em aberto executando.... Ela não encerra... Como resolvo?
-
Bem lembrado, esqueci desse pequeno detalhe.
Como não temos um Form como "principal", a applicação só termina quando damos um Application.Exit();
Para resolver isso, crie um evento FormClosed nos Forms que o problema aparece e adicione o código:
if (Application.OpenForms.Count == 0) { Application.Exit(); }
Assim, caso não exista outros Forms abertos, a aplicação irá encerrar.
Att., Rafael Simor
- Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:13
-