none
Pegar usuário da janela de login RRS feed

  • Pergunta

  • Olá!

    estou com a seguinte dificuldade, tenho uma janela de login e um formulário principal que abre junto com a tela de login, só que para acessar a janela principal é preciso acessar a janela de login com usuário e senha logicamente.

    o que ocorre é que preciso pegar o nome do usuário em mostrar em uma status bar após o login no sistema só que só consigo fazer se o formulário principal abrir somente depois de logar, quando ele já está aberto atras do login aguardado o usuário, não consigo mostrar o nome do usuário na status bar.

    já passei pro construtor do formulário principal e depurei a aplicação e percebi que os valores que quero são passados corretamente mas não mostra na status bar, já dei refresh no form e na status bar e nada. meu formulário de login é showDialog() acredito que possa ser por isso mas também não da pra ser diferente.

    Espero que tenha me feito entender!

    quarta-feira, 13 de fevereiro de 2013 11:58

Respostas

  • tente  usar o método:

    Application.DoEvents();

    frmPrincipal oFrmPrincipal = new frmPrincipal();

    oFrmPrincipal.tslNomeUsuario.Text = txtNomeUsuario.Text;

    oFrmPrincipal.ssRodape.Refresh(); Application.DoEvents(); this.Hide();


    é como se ele forcasse a atualização...

    ou o que acontece pode ser o seguinte, se o seu form principal já está aberto você está atualizando um 'novo formulário' pois a referência de memória está errada... o que voc~e deve fazer é usar a classe Application.OpenForms e atualiza-lo 

    ex:

    ((FrmPrincipal)Application.OpenForms["FrmPrincipal"]).tslNomeUsuario.Text = txtNomeUsuario.Text; 
    //tente assim provavelmente irá funcionar, só verifique se o FrmPrincipal é o nome certinho do seu form

    abraços ! 

    quarta-feira, 13 de fevereiro de 2013 18:37

Todas as Respostas

  • Modifier do componente que vai receber o valor da string de login está como public? 

    Já tentou 

    SeuForm Frm = new SeuForm(); Frm.StatusBar.Text = StringUsuário;

    Frm.ShowDialog();


    ?

    Abraços


    Se a resposta foi útil, não deixe de clicar na setinha verde. Alguma ajuda neste tópico te levou a solução do problema? Então proponha como resposta para o tópico ser melhor identificado.

    quarta-feira, 13 de fevereiro de 2013 12:38
  • Olá,

    Quando carregas no botão login faz o seguinte:

    //A label onde queres mostrar o nome //Windows Form frmPrincipal.lblNomeUtilizador.Text = txtNomeUtilizador.Text frmLogin.Hide() //Close() //WPF

    frmPrincipal.lblNomeUtilizador.Text = txtNomeUtilizador.Text frmLogin.Hide() //Close()


    Cumpz, ADAE.

    • Editado AD_AE quarta-feira, 13 de fevereiro de 2013 12:44
    quarta-feira, 13 de fevereiro de 2013 12:41
  • Isso já fiz não funcionou!
    quarta-feira, 13 de fevereiro de 2013 12:59
  • Testei este código e nada!
    quarta-feira, 13 de fevereiro de 2013 12:59
  • Coloca o teu código aqui.

    se for como estou pensando, após confirmar o login você deve chamar o método que atualiza o teu status bar.

    sds

    quarta-feira, 13 de fevereiro de 2013 13:33
  • Segue o código do login mas já estou atualizando a status e nada!

    if (verificaLogin)
                {
                    frmPrincipal oFrmPrincipal = new frmPrincipal();
                    oFrmPrincipal.tslNomeUsuario.Text = txtNomeUsuario.Text;
                    oFrmPrincipal.ssRodape.Refresh();
                    this.Hide();
                }
                else
                {
                    lblUsuarioSenhaInvalido.Visible = true;
                    pbUsuarioInvalido.Visible = true;
                }
                oFrmCarregando.Close();

    quarta-feira, 13 de fevereiro de 2013 13:50
  • Bom eu tenho uma classe static onde guardo essas informações caso precise de reabrir a conexão

    Então qndo preciso colocar o nome de usuario eu simplesmente pego o get desta classe e utilizo.


    "A mente que se abre para uma nova idéia, jamais voltará a seu tamanho original".

    quarta-feira, 13 de fevereiro de 2013 13:53
  • sugiro o seguinte:

    criar uma string no form login que receba o nome do usuario.

    no seu caso quando voce atualiza ja pode estar vazio o txtNomeUsuario.

    no inicio do form login:

    public string usuario="";

    quando inicia o login:

    usuario=txtNomeUsuario.text;

     

    e depois somente chama a string no lugar do txtNomeUsuario no seu codigo.

    deve funcionar.

    quarta-feira, 13 de fevereiro de 2013 14:01
  • Vou tentar e posto, mas acredito que não seja isto pois depurei e está sendo carregado normalmente, o problema está sendo em não mostrar no statusStrip na label que eu criei.

    O que ocorre é que se eu mostrar somente o form de login e depois de logar chamar o form principal tudo carrega normalmente sem problema é que quero que o form principal fique aberto atras do form de login até o usuário logar e então desta forma ocorre o problema.

    Abraço!


    quarta-feira, 13 de fevereiro de 2013 14:05
  • o frmPrincipal é pai?

    quarta-feira, 13 de fevereiro de 2013 14:39
  • Crie uma variavel estática:

    public static String Usuario {get;set}
    após logar, atribua o valor a essa variavel e conseguirá acessar de toda aplicação =D

    quarta-feira, 13 de fevereiro de 2013 15:00
  • Não estou trabalhando com MDI, o primeiro form é o frmPrincipal chamado na Program!
    quarta-feira, 13 de fevereiro de 2013 16:42
  • Olá!

    O problema não está em acessar e sim em mostrar na statusStrip.

    O que ocorre é que se eu mostrar somente o form de login e depois de logar chamar o form principal tudo carrega normalmente sem problema é que quero que o form principal fique aberto atras do form de login até o usuário logar e então desta forma ocorre o problema.

    Abraço!

    quarta-feira, 13 de fevereiro de 2013 16:43
  • independente de usar mdi ou não, com as variaveis estáticas você consegue isso de maneira bem simples...

    tente fazer assim, salve na variavel estática e no load do seu form você atribui o valor a sua statusbar...

    ou se persistir o erro, pode me enviar o projeto por email para q possa lhe ajudar ?

    abraços

    =D

    quarta-feira, 13 de fevereiro de 2013 16:46
  • O problema é que o form Principal já está carregado ele carrega junto com o form de login este tem sido o problema pois se fizer carregar depois ai consigo fazer sem problema.

    agradeço a boa vontade em ajudar e analisar meu projeto, só que não posso envia-lo pois o banco é web e já tem certas informações da empresa a qual estou desenvolvendo, mas de qualquer maneira muito obrigado!

    quarta-feira, 13 de fevereiro de 2013 16:53
  • realmente não atualiza.

    mistério!!!

    estou vendo e assim que encontrar algo eu coloco aqui.

    quarta-feira, 13 de fevereiro de 2013 17:01
  • OK, Obrigado!
    quarta-feira, 13 de fevereiro de 2013 17:16
  • Tenta fazer assim,

    Program.CS 

     static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    
                // O Form2 é o meu Login, aqui no exemplo, então vou exibi-lo
                TelaDeLogin f = new TelaDeLogin();
    
                // Se o OK for pressionado, eu abro o aplicativo, senão eu saio
                if (f.ShowDialog() == DialogResult.OK)
                {
                    TelaPrincipal telaPrinc = new TelaPrincipal();
                    telaPrinc.Usuario = f.Usuario;
                    Application.Run(telaPrinc);
                }
    
    
                  
                
            }
        }


    Tela de Login:

      Usuario = new UsuarioLogado();
     Usuario.NomeLogado = usuario;
     this.DialogResult = DialogResult.OK;

    Tela principal :

      public UsuarioLogado Usuario;

    Classe UsuarioLogado:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace BaseDeConhecimento
    {
        public class UsuarioLogado
        {
            public string NomeLogado { get; set; }
        }
    }
    

    É a forma que utilizo em um dos meus programas, abraço.

    quarta-feira, 13 de fevereiro de 2013 18:19
  • Assim Funciona sem problemas inclusive sempre fazia desta maneira a questão é que achei interessante já ter o form principal executando atras do form de login e desta maneira é que ocorre o problema pois o form principal já esta em execução ai a informação não está atualizando.

    Abraço,

    quarta-feira, 13 de fevereiro de 2013 18:28
  • tente  usar o método:

    Application.DoEvents();

    frmPrincipal oFrmPrincipal = new frmPrincipal();

    oFrmPrincipal.tslNomeUsuario.Text = txtNomeUsuario.Text;

    oFrmPrincipal.ssRodape.Refresh(); Application.DoEvents(); this.Hide();


    é como se ele forcasse a atualização...

    ou o que acontece pode ser o seguinte, se o seu form principal já está aberto você está atualizando um 'novo formulário' pois a referência de memória está errada... o que voc~e deve fazer é usar a classe Application.OpenForms e atualiza-lo 

    ex:

    ((FrmPrincipal)Application.OpenForms["FrmPrincipal"]).tslNomeUsuario.Text = txtNomeUsuario.Text; 
    //tente assim provavelmente irá funcionar, só verifique se o FrmPrincipal é o nome certinho do seu form

    abraços ! 

    quarta-feira, 13 de fevereiro de 2013 18:37
  • Cara demais valeu mesmo, Bombou!

    Obrigado, obrigado aos demais também pelo empenho!

    quarta-feira, 13 de fevereiro de 2013 19:04
  • Cara demais valeu mesmo, Bombou!

    Obrigado, obrigado aos demais também pelo empenho!

    hehe aii sim !!

    qualquer duvida estamos a disposição para NOS AJUDAR-MOS

    kkkkkkk

    tamo junto ;D

    quarta-feira, 13 de fevereiro de 2013 19:13