none
Método Close RRS feed

  • Pergunta

  • Olá pessoas,

    estou com um problema para fechar e abrir formulários. Acredito que seja simples de resolver mas eu não consegui fazer. O problema é o seguinte: Tenho 2 formulários (Form2 e Form3) no form2 tem um botão que deveria fechar o próprio form2 e abrir o form3. Com o seguinte código:

    Public Class Form2
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Close()
            Form3.ShowDialog()
        End Sub
    End Class

    Deixando apenas a parte do código: Me.Close(), o Form2 é fechado normalmente, no entanto, quando adicionado: Form3.ShowDialog() o Form2 fica por baixo e não é fechado até que o Form3 seja fechado manualmente. Alguém poderia me ajudar?

    quarta-feira, 28 de dezembro de 2016 14:00

Respostas

  • Bom dia Thiago,

    Não tenho certeza se em VB é assim também, mas em C# existe o conceito de escopo. Então nesse caso dos forms, o novo form esta no contexto, ou escopo, do form2, e enquanto o novo form estiver em uso não é possível fechar o form2, apenas ocultá-lo. O que eu faria em C# é criar o form3 fora do escopo do form2, e deste apenas chamar o form3 e então fechar o form2.

    Atenciosamente,


    Robson William Silva

    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.

    quinta-feira, 29 de dezembro de 2016 11:54
    Moderador

Todas as Respostas

  • Boa tarde ThiagoPG,

    Você pode tentar configura as propriedades do projeto selecionando "When last form closes" no dropdown "shutdown mode"

    Menu "Project" -> Propriedades ...-> Aba da aplicação

    Encontre o "Shutdown mode"

    Mude de "When startyp form closes" para "When last form closes"

    Atenciosamente,


    Robson William Silva

    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.

    quarta-feira, 28 de dezembro de 2016 16:11
    Moderador
  • Robson, 

    fiz o que você recomendou, mas não deu certo. O Form2 continua aberto por baixo do Form3

    quarta-feira, 28 de dezembro de 2016 16:37
  • É necessário realmente fechar o form?

    Se não, você poderia tentar usar o "Me.Hide()", para ocultar o form.

    Atenciosamente,


    Robson William Silva

    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.

    quarta-feira, 28 de dezembro de 2016 19:25
    Moderador
  • Pode ser feito assim:

     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Hide()
            Form3.ShowDialog()
            Close()
        End Sub

    Att,


    Antero Marques
    ____________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.



    quarta-feira, 28 de dezembro de 2016 20:18
  • Eu fiz utilizando o Me.Hide(), ou apenas o Hide(), funciona, para o que eu queria dá certo, no entanto, gostaria de entender pq do outro jeito não funciona, pelo o que observei parece que o método ShowDialog() que não deixa o form anterior ser fechado.
    quinta-feira, 29 de dezembro de 2016 01:00
  • Bom dia Thiago,

    Não tenho certeza se em VB é assim também, mas em C# existe o conceito de escopo. Então nesse caso dos forms, o novo form esta no contexto, ou escopo, do form2, e enquanto o novo form estiver em uso não é possível fechar o form2, apenas ocultá-lo. O que eu faria em C# é criar o form3 fora do escopo do form2, e deste apenas chamar o form3 e então fechar o form2.

    Atenciosamente,


    Robson William Silva

    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.

    quinta-feira, 29 de dezembro de 2016 11:54
    Moderador
  • Robson,

    Entendi o que você disse, acredito que no VB funcione da mesma forma que no C#. Obrigado pela ajuda.

    quinta-feira, 29 de dezembro de 2016 20:04