Usuário com melhor resposta
Como fazer uma tela de Login

Pergunta
-
Estou tentando criar uma Tela de Login.
Exemplo: Tenho 2 forms. frmLogin e frmMenu.
1 - Quando abrir o programa o Usuário deverá ser redirecionado para a tela de Login e depois de fazer o acesso ele irá para a tela de Menu, fechando o login ou escondendo ele. O que eu costumo fazer em WinForms é: Eu coloco a tela de login como principal e abro ela. Depois do acesso eu escondo com Hide e mostro o Menu. Quando terminar de usar o menu, essa tela fecha o Login com frmLogin.Close(); -> Mas em WPF eu não consigo fechar a tela do Login pel FormMenu.
2 - Deixo o FormMenu como principal e quando abro ele Escondo com Hide() e mostro o frmLogin. Depois do acesso Mostro o frmMenu com frmMenu.Show() e fecho o Login com This.Close(); -> Quando coloco no evento Loaded ele mostra primeiro o frmMenu e depois esconde o Form. Minha Alternativa foi colocar o Comando Hide no Construtor, mas sempre que eu faço Show nesse form ele chama o Construtor e abre novamente o FormLogin.
O que eu preciso é de uma ajuda para fazer um programa que quando abrir Mostre o frmLogin, depois feche ele e mostre o frmMenu. Dai quando eu fechar o frmMenu ele feche a aplicação. Não precisa nem de banco e nem de verificação de usuário. Só preciso de ajuda, para saber como fazer isso em WPF.
Respostas
-
Entao, vamos começar acertando as definições...
WPF não tem Form... vc tem Window, Page e UserControl (tres coisas parecidas, mas bem diferentes entre si... e totalmente diferentes de um Form Windows ou ASP).
Crie uma Window para Login e uma Window para o host de sua aplicação
no App.xaml vc define o StartupUri apontando para a sua Window de Login.... (ex: StartupUri="Windows\Login.xaml")
no metodo de verificação de usuario da sua Window de Login se a verificação for negativa.. vc usa o MessageBox, se for positica.. vc muda o MainWindow do Application
ex:private void EfetuarLogin(bool acessoNegado) { this.Cursor = Cursors.Wait; try { if (acessoNegado) { MessageBox.Show("Acesso Negado!", "Login", MessageBoxButton.OK, MessageBoxImage.Exclamation); } else { App.Current.MainWindow = new Main(); App.Current.MainWindow.Show(); this.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Login", MessageBoxButton.OK, MessageBoxImage.Exclamation); } finally { this.Cursor = Cursors.Arrow; } }
What would Brian Boitano do ?
((2B || !2B) is Question) ?- Marcado como Resposta _Rodolfo quarta-feira, 28 de abril de 2010 11:39
Todas as Respostas
-
Rodolfo,
Estou levando em consideração de que as duas telas são window.
É bem simples utilize os método Window.Close() e o Window.ShowDialog()
O método showdialog retorna true ou false caso voce necessite ver se a tela está aberta.
- Sugerido como Resposta Thiago MDTech terça-feira, 27 de abril de 2010 18:43
-
Não é tão simples assim, estou usando WPF por isso entrei no Fórum de WPF. E também mesmo que fosse WinForm eu não poderia usar ShowDialog() porque quando usa esse comando, eu perco a possibilidade de interagir com o Form anterior. Essa solução não funciona em WPF.
-
Rodolfo,
Voce está utilizando MVVM?
Senão para ter essa interatividade só crie uma propriedade pública no FormMenu que pegue o FormLogin aí voce consegue manipular da forma que quiser, é bem simples sim.
Outra coisa Rodolfo quando eu disse Window quis dizer classe Window do WPF, não disse nada de Windows Forms voce está confundindo os termos.
- Sugerido como Resposta Thiago MDTech terça-feira, 27 de abril de 2010 19:10
-
-
Isso exatamente deve ser do mesmo tipo da sua tela que provavelmente é da classe Window.
- Sugerido como Resposta Thiago MDTech terça-feira, 27 de abril de 2010 19:38
-
Entao, vamos começar acertando as definições...
WPF não tem Form... vc tem Window, Page e UserControl (tres coisas parecidas, mas bem diferentes entre si... e totalmente diferentes de um Form Windows ou ASP).
Crie uma Window para Login e uma Window para o host de sua aplicação
no App.xaml vc define o StartupUri apontando para a sua Window de Login.... (ex: StartupUri="Windows\Login.xaml")
no metodo de verificação de usuario da sua Window de Login se a verificação for negativa.. vc usa o MessageBox, se for positica.. vc muda o MainWindow do Application
ex:private void EfetuarLogin(bool acessoNegado) { this.Cursor = Cursors.Wait; try { if (acessoNegado) { MessageBox.Show("Acesso Negado!", "Login", MessageBoxButton.OK, MessageBoxImage.Exclamation); } else { App.Current.MainWindow = new Main(); App.Current.MainWindow.Show(); this.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Login", MessageBoxButton.OK, MessageBoxImage.Exclamation); } finally { this.Cursor = Cursors.Arrow; } }
What would Brian Boitano do ?
((2B || !2B) is Question) ?- Marcado como Resposta _Rodolfo quarta-feira, 28 de abril de 2010 11:39
-