none
Dúvida ao usar o ShowDialog RRS feed

  • Pergunta

  • Olá pessoal, estou usando o MDI PARENT, está funcionando perfeitamente, mas somente com Show(), se usar ShowDialog(), dá uma mensagem de erro: O formulário que não é de nível superior, não pode ser exibido como caixa de diálogo Modal, o problema é que se usar o Show(), ao clicar fora do form, ele fecha, como eu poderia contornar esse problema ?

    frmPagamento, é o terceiro form, seria um form chamando outro, por isso fiz a rotina dessa forma

                if (Program.vfrmPagamento == null)
                {
                     Program.vfrmPagamento = new frmPagamento();
                    // VINCULA FORMULARIO AO PAI
                     Program.vfrmPagamento.MdiParent = this.MdiParent; //(this se refere ao frmVendas)
                    //Program.vfrmPagamento.ShowDialog(); // ShowDialog para nao fechar se clicar fora do form
                    Program.vfrmPagamento.Show(); // nesse caso não pode ser Showdialog, tem que ser Show().
                }

    C#, Windows Form.

    sexta-feira, 5 de abril de 2019 13:31

Respostas

  • Olá, certo.. mantém como MDI e usa o evento Deactivate do Form para o cenário "se clicar fora, fechar o form"...

            private void Form1_Deactivate(object sender, EventArgs e)
            {
                Close();
            }
    


    Se ajudou, marque como resposta! Obrigado.

    • Marcado como Resposta Porter Porter sexta-feira, 5 de abril de 2019 15:29
    sexta-feira, 5 de abril de 2019 15:23

Todas as Respostas

  • Olá, tenta o código...

                if (Program.vfrmPagamento == null)
                {
                     Program.vfrmPagamento = new frmPagamento();
                     Program.vfrmPagamento.ShowDialog(); // ShowDialog para nao fechar se clicar fora do form
                }


    Se ajudou, marque como resposta! Obrigado.

    sexta-feira, 5 de abril de 2019 14:50
  • Olá Leonardo,

    Se comentar o comando abaixo, ele perde a função de MDI FORM, entendeu, e preciso não deixar fechar se clicar fora ou se clicar fora, fechar o form, porque se ele ficar aberto, e houver alguma mudança nas informações do form anterior, o form em questão não atualiza.

    //Program.vfrmPagamento.MdiParent = this.MdiParent; //(this se refere ao frmVendas)

    C#, windows Form.

    sexta-feira, 5 de abril de 2019 15:13
  • Olá, certo.. mantém como MDI e usa o evento Deactivate do Form para o cenário "se clicar fora, fechar o form"...

            private void Form1_Deactivate(object sender, EventArgs e)
            {
                Close();
            }
    


    Se ajudou, marque como resposta! Obrigado.

    • Marcado como Resposta Porter Porter sexta-feira, 5 de abril de 2019 15:29
    sexta-feira, 5 de abril de 2019 15:23
  • Obrigado Leonardo,

    Funcionou perfeitamente.

    sexta-feira, 5 de abril de 2019 15:29
  • Olá Leonardo, tenho mais uma dúvida, como faço para verificar se a tecla pressionada foi o F11 ou se foi clicado em btnPagamento, sei que pelo KeyDown, consigo capturar a tecla, mas preciso verificar a tecla na rotina abaixo.

    private void frmPagamento_Deactivate(object sender, EventArgs e)
            {
                Se foi teclado F11 ou clicado em btnPagamento <-- qual comando usar aqui.
                {
                    Close(); // Se clicar fora do form, ele fecha
                }
            }

    C#, WindowsForm

    sábado, 6 de abril de 2019 11:32
  • Olá, tenta o código...

            private bool bF11 = false;
    
            private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.F11)
                    bF11 = true;
            }
    
            private void Form1_Deactivate(object sender, EventArgs e)
            {
                if (bF11)
                {
                    Close();
                }
            }


    Se ajudou, marque como resposta! Obrigado.

    sábado, 6 de abril de 2019 12:57
  • Entendi Leonardo, guarda em uma variável, achei que houvesse outra forma de saber qual a tecla pressionada fora do Keydown.

    Obrigado.

    sábado, 6 de abril de 2019 13:12