Array
(
)

Fechar um Form de Login Sem Encerrar o Projeto CSharp

Paulo Ricardo
   - 15 out 2014

Olá Galera, to com uma duvida sobre como fechar um form e abrir outro sem que feche todo o projeto eu estou migrando do VB.NET para C#, e to com essa duvida, com o vb.net eu usava o metodo #Código

Me.Finalize()
tentei #Código
this.finalize();
com o C# Mas nao existe, se uso #Código
this.close();
encerra todo o projeto a unica solução que me sobrou foi o #Código
this.Hide();
que apenas esconde o form, mas ele continua ativo (eu acho...), isso pode deixar o programa lento consumir muita memoria ??

Lucas Rocha
|
MVP
    15 out 2014

Cara eu acho que a única solução é usar:
#Código

this.Hide();


Só que quanto mais forms abrir mais memoria vai pro espaço, então a solução é deixar sempre o primeiro form em hide() e fechar os outros.
Para fechar o form utilize o
#Código
   {
            this.Close();
        }

Joel Rodrigues
   - 15 out 2014

O projeto encerra quando você fecha o form de login devido a ele ser o primeiro form da aplicação. Para resolver isso, você deve colocar o form principal como sendo o primeiro, ou seja, a tela principal da sua aplicação. O form de login deve ser secundário e deve ser aberto no evento Load desse form principal.

Para fazer isso, vá até a classe Program (arquivo Program.cs) e no método Application.Run, mude do form de login para o principal. Por exemplo:
#Código

Application.Run(new FormPrincipal());


Isso fará com que o primeiro form a ser aberto seja o FormPrincipal. Mas como o de login deve ser apresentado para o usuário antes que a tela principal seja aberta, você deve ir no evento Load do FormPrincipal, chamar o de login, e só mostrar o principal se o login for efetuado. Por exemplo:

#Código
private void FormPrincipal_Load(object sender, EventArgs e)
{
	using (FormLogin Form = new FormLogin())
        {
                Form.ShowDialog();
		// Aqui considerei que se o login for efetuado com sucesso, o DialogResult será OK
                if (Form.DialogResult != DialogResult.OK)
                {
                    Application.Exit();
                    return;
                }
	}
}


Como esse código está no evento Load, isso ocorrerá antes do form principal ser aberto (evento Shown). Assim, se o usuário fechar o form de login, o Application.Exit fechará a aplicação antes do form principal aparecer. Caso o login ocorra normalmente e o DialogResult for true, o fluxo do código seguirá normalmente no form principal, fazendo com que ele seja exibido.

Espero ter sido claro.