Jump to content

Login - Hide/Show


RJ90
 Share

Recommended Posts

Boas!

Bem, estou aqui a brincar um pouco e deparo-me aqui com um problema.

Eu quero fazer o seguinte: A aplicação tem uma primeira janela, login, através dela, será permitido o acesso as restantes janelas. O problema é, após login com sucesso, a janela de login, deve ser escondida (hide) e aparecer a seguinte janela.

Código para que isso aconteça:

            this.Hide();
            Form2 form2 = new Form2();
            form2.Show();

Agora, na janela seguinte, o utilizador, tem um botão caso deseje terminar a aplicação, em que deve ser encaminhado para a janela de login.

Código para que isso aconteça:

            this.Close();
            Form1 form1 = new Form1();
            form1.Show();

O problema disto, é que se fechar depois a janela do login, o processo continua activo e não deve.

Alguém me pode ajudar?

Link to comment
Share on other sites

O problema disto, é que se fechar depois a janela do login, o processo continua activo e não deve.

O processo continua activo porque a primeira janela de login que aparece ainda está "viva". Quando fazes this.Hide() no primeiro segmento não estás a matar a janela, estás apenas a escondê-la. Se fizeres this.Close() (passando a instrução para o fim) já deverá funcionar.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

O processo continua activo porque a primeira janela de login que aparece ainda está "viva". Quando fazes this.Hide() no primeiro segmento não estás a matar a janela, estás apenas a escondê-la. Se fizeres this.Close() (passando a instrução para o fim) já deverá funcionar.

Sim, eu sei, mas se usar o this.Close() no form1, toda a aplicação irá fechar, ou seja, ao iniciar, no login, a aplicação será fechada, pois a form1 é que "dita o encerramento da aplicação".

Se fizeres this.Close() (passando a instrução para o fim) já deverá funcionar.

Será isso a resolução para o que disse? É que não entendi muito bem essa parte. Quer dizer, entender, até entendi, mas não sei como aplicar.

Link to comment
Share on other sites

Sim, eu sei, mas se usar o this.Close() no form1, toda a aplicação irá fechar, ou seja, ao iniciar, no login, a aplicação será fechada, pois a form1 é que "dita o encerramento da aplicação".

Será isso a resolução para o que disse? É que não entendi muito bem essa parte. Quer dizer, entender, até entendi, mas não sei como aplicar.

O this.Close() tem que ser depois do form1.Show(); senão, a aplicação fecha e não executa o resto das instruções (que incluem a abertura do novo form, que manterá a aplicação "viva").

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

nmwj0z2tpg3dv8qedsx.png

Código de 1:

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
            this.Hide();
        }

PS: Não posso usar this.Close, pois fará a aplicação fechar.

Código de 2:

        private void button2_Click(object sender, EventArgs e)
        {
            //this.Close(); Errado!
            Application.Exit(); //Correcto!
        }

EDIT: Bem, se usar Application.Exit(); o processo é terminado. Agora, existe outro problema, é no controlBox, se o utilizador sair através do controlBox, o processo continua activo. Se retiro o controlBox, o icon da janela também é retirado. Como posso dar a volta a isso?

EDIT: Já consegui. Fiz assim, criei o Event FormClosed e meti lá o método Application.Exit();

Fica assim:

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();  
        }


x48ww0mszp6yw0l3j09v.png

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1 form1 = new Form1();
            form1.Show();
            this.Close();
        }


Em Program.cs

        [sTAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.