none
Como fazer uma tela de Login RRS feed

  • 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.

     

     

    terça-feira, 27 de abril de 2010 13:45

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
    terça-feira, 27 de abril de 2010 20:11
    Moderador

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
    terça-feira, 27 de abril de 2010 18:42
  •   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.
    terça-feira, 27 de abril de 2010 18:49
  • 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
    terça-feira, 27 de abril de 2010 19:04
  • Não entendi a parte da Propriedade que tem que criar no FormMenu. Pode me dizer de qual tipo ela deve ser? É do tipo do Form?

    terça-feira, 27 de abril de 2010 19:12
  • 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
    terça-feira, 27 de abril de 2010 19:35
  • 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
    terça-feira, 27 de abril de 2010 20:11
    Moderador
  • Muito obrigado era isso mesmo que eu precisava, funcionou perfeitamente.

    quarta-feira, 28 de abril de 2010 11:21