none
C# - Como verificar se Form já está aberto? RRS feed

  • Pergunta

  • Olá, Fiz um Form de senha ao confirma a senha ele chama o form Menu, quando o form está aberto tenho um botão para trocar de usuário, que ao ser pressionado chama novamente o form Senha. Porém quando confirma a senha ele abre outro form Menu, quando quero que ele verifique se o form Menu já está aberto e apenas feche o Form Senha.

    Lembrando que isso foi uma ideia que eu usava quando programava em Pascal, se alguém souber de uma forma melhor de executar essa tarefa também irei analisar!

     
    • Editado A.Junior.cta terça-feira, 2 de janeiro de 2018 16:28
    terça-feira, 2 de janeiro de 2018 16:28

Respostas

  • Olá Infortechcta

    Tente usar assim:

    string query = "SELECT usuario, senha FROM usuarios WHERE usuario= '" + usu + "' && senha= '" + sen + "' ";
    MySqlDataAdapter data = new MySqlDataAdapter(query, conexao);
    DataTable dt = new DataTable();
    data.Fill(dt);
    
    if (dt.Rows.Count == 1)
    {
        //AQUI SE OS DADOS CONFEREM ABRE O FORM MENU
        var frmmenu = Application.OpenForms["formmenu"];
        if(frmmenu == null)
        {
            frmmenu = new formmennu();
        }
        frmmenu.Show();
        this.Close();
    
    }
    else
    {
        MessageBox.Show("DADOS INVALIDOS, TENTE NOVAMENTE!", "INFORMAÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Information);
        txtusuario.Focus();
        txtsenha.Text = "";
    }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    quarta-feira, 3 de janeiro de 2018 12:57
  • Oi Rafael, não deu certo ele verifica vê que o menu esta fechado e abre, porém quando ele já esta aberto ele abre novamente! Sei que não é muito profissional mais como tenho pressa fiz assim:

    Como a tela login não fecha apenas fica oculta com o comando

    this.Close();

    então criei uma variável

    public static string OpemSim;

    e fiz o seguinte

     if (dt.Rows.Count == 1)
                    {
                        if (OpemSim == null)
                        {
                            OpemSim = "1";
                            formmennu frmenu = new formmennu();
                            frmenu.Show();                        
                            this.Close();
                        }
                        else
                        {
                            this.Close();
                        }
                    }
                    else
                    {

    Nesse caso quando chamo o forme pela primeira vez ele verifica que a string está vazia abre o form e preenche com 1, quando abrir novamente ele verifica que já há um  form aberto e apenas oculta o form login novamente!

    Claro que espero a forma profissional essa é apenas um forma q fiz pra continuar meu projeto!

    • Marcado como Resposta A.Junior.cta sábado, 15 de dezembro de 2018 12:12
    quarta-feira, 3 de janeiro de 2018 23:14

Todas as Respostas

  • Ola Infortechcta

    Feliz 2018!

    Então vamos lá, para verificar os forms abertos você pode usar:

    var formsAbertos = Application.OpenForms;
    foreach (var frm in formsAbertos)
    {
        // faz seu tratamento aqui!
    }
    

    Mais eu particularmente costumo restartar a aplicação assim:

    Application.Restart();

    Por motivo de segurança, para garantir que todas informações que estão sendo executadas, e estão em memória, sejam do usuário logado!



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    terça-feira, 2 de janeiro de 2018 16:39
  • Olá Rafael Almeida, eu não entendi esse comando o que ele faz exatamente para que eu possa tratar! Poderia me explicar com mais uns detalhes! Sou novo em c#!

    String query = "SELECT usuario, senha FROM usuarios WHERE usuario= '" + usu + "' && senha= '" + sen + "' ";
                    MySqlDataAdapter data = new MySqlDataAdapter(query, conexao);
                    DataTable dt = new DataTable();
                    data.Fill(dt);
    
                    if (dt.Rows.Count == 1)
                    {
                        //AQUI SE OS DADOS CONFEREM ABRE O FORM MENU
                            formmennu frmmenu = new formmennu();
                            frmmenu.Show();
                            this.Close();                    
                        
                    }
                    else
                    {
                        MessageBox.Show("DADOS INVALIDOS, TENTE NOVAMENTE!", "INFORMAÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtusuario.Focus();
                        txtsenha.Text = "";
                    }
                }

    Veja, se os dados conferem ele abre o form, queria implementar algo aqui que antes de abrir verifique se ele está aberto para se estiver apenas feche o form de login! 

    quarta-feira, 3 de janeiro de 2018 02:00
  • Olá Infortechcta

    Tente usar assim:

    string query = "SELECT usuario, senha FROM usuarios WHERE usuario= '" + usu + "' && senha= '" + sen + "' ";
    MySqlDataAdapter data = new MySqlDataAdapter(query, conexao);
    DataTable dt = new DataTable();
    data.Fill(dt);
    
    if (dt.Rows.Count == 1)
    {
        //AQUI SE OS DADOS CONFEREM ABRE O FORM MENU
        var frmmenu = Application.OpenForms["formmenu"];
        if(frmmenu == null)
        {
            frmmenu = new formmennu();
        }
        frmmenu.Show();
        this.Close();
    
    }
    else
    {
        MessageBox.Show("DADOS INVALIDOS, TENTE NOVAMENTE!", "INFORMAÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Information);
        txtusuario.Focus();
        txtsenha.Text = "";
    }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    quarta-feira, 3 de janeiro de 2018 12:57
  • Oi Rafael, não deu certo ele verifica vê que o menu esta fechado e abre, porém quando ele já esta aberto ele abre novamente! Sei que não é muito profissional mais como tenho pressa fiz assim:

    Como a tela login não fecha apenas fica oculta com o comando

    this.Close();

    então criei uma variável

    public static string OpemSim;

    e fiz o seguinte

     if (dt.Rows.Count == 1)
                    {
                        if (OpemSim == null)
                        {
                            OpemSim = "1";
                            formmennu frmenu = new formmennu();
                            frmenu.Show();                        
                            this.Close();
                        }
                        else
                        {
                            this.Close();
                        }
                    }
                    else
                    {

    Nesse caso quando chamo o forme pela primeira vez ele verifica que a string está vazia abre o form e preenche com 1, quando abrir novamente ele verifica que já há um  form aberto e apenas oculta o form login novamente!

    Claro que espero a forma profissional essa é apenas um forma q fiz pra continuar meu projeto!

    • Marcado como Resposta A.Junior.cta sábado, 15 de dezembro de 2018 12:12
    quarta-feira, 3 de janeiro de 2018 23:14
  • Boa tarde, Infortechcta. Tudo bem?

    Conseguiu algum avanço no teu caso?

    Se ainda não, o que precisa?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 5 de janeiro de 2018 17:34
    Moderador
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 15 de janeiro de 2018 18:43
    Moderador
  • Boa tarde,

    Eu uso assim:

                    int i = 0;
                    foreach (Form form in Application.OpenForms)
                    {
                        FrmGridPesquisaLancContasReceber frmGridPesquisaLancContasReceber = new FrmGridPesquisaLancContasReceber(true);
                        // Verifica se o form esta aberto
                        if (form.Name == "FrmGridPesquisaLancContasReceber")
                        {
                            i = -1;
                            MensageBoxPadrao.VerificaFormAberto();
                            Application.OpenForms[frmGridPesquisaLancContasReceber.Name].Focus();
                            break;
                        }
                    }
                    if (i != -1)
                    {
    
                        FrmGridPesquisaLancContasReceber frmGridPesquisaLancContasReceber = new FrmGridPesquisaLancContasReceber(true);
                        frmGridPesquisaLancContasReceber.Owner = this;
                        frmGridPesquisaLancContasReceber.Show();
                        frmGridPesquisaLancContasReceber.TxtIdCliente.Focus();
    
                    }

    terça-feira, 16 de janeiro de 2018 17:39