none
Problema com tela de Splash RRS feed

  • Pergunta

  • /*Ola, Galera tudo bem..!!!
    Estou com um pequeno probleminha que ainda não consegui resolver..!!! Fiz varias tentivas, mas nem um sucesso.
    Tenho aplicação que chama uma tela de Splash depois de carregar todo o Processgbar é 
    chamado uma telinha de controle de usuários pedindo login e senha digitando o login e a
    senha sendo se o mesmo for validado corretamento ai sim é aberta o Software, o problema
    é que a tela de Splash não some ou seja mesmo depois com o login validado e a tela do 
    Software aberta ele continua aberto..!!
    A telinha de controle de usuário eu consegui tratar da seguinte forma
    Procedimento passo-a-passo
    
    1º. frmSplash - Erro
    2º. frmLogin - Ok
    3º. frmPrograma - Ok
    */
    /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
    
    	private int erroL = 0;
            private int contErro = 2;
            private int recVal = 0;
            private void btnLogar_Click(object sender, EventArgs e)
            {
                if (txtLogin.Text != string.Empty)
                {
                    if (txtSenha.Text != string.Empty)
                    {
                        Form_Principal.Login objLogin = new Form_Principal.Login();
    
                        objLogin.NomeLogin = txtLogin.Text;
                        objLogin.Senha = txtSenha.Text;
    
                        try
                        {
                            Servidor_e_Regras.RegraDeNegocio objBll = new Servidor_e_Regras.RegraDeNegocio();
                            objBll.logarLoginConn(objLogin);
    
                            //Servidor_e_Regras.ProcedimentosSql objSql = new Servidor_e_Regras.ProcedimentosSql();
                            recVal = contErro - erroL;
                            lbStatus.Text = "Login ou Sennha invalido, ainda restão "+recVal+" tentativas.";
                            if (erroL < 3)
                            {
                                if (Servidor_e_Regras.ProcedimentosSql.status == true)
                                {                                
                                    //MessageBox.Show("Status ok>>");
                                    Servidor_e_Regras.ProcedimentosSql.status = false; //Status retorna a ser False
    
                                    this.Visible = false;
                                    frmPrincipal frm = new frmPrincipal();
                                    frm.ShowDialog();
                                }                            
                                else
                                {
                                    pictureLoginErrado.Visible = true;
                                    pictureLoginCerto.Visible = false;
                                    lbStatus.Visible = true;
                                    MessageBox.Show("Usuário ou Senha Invalido..!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    erroL++;
                                }
                            }
                            else
                            {
                                Application.Exit();
                            }
                        }
                        catch (Exception ex)
                        {
    
                            throw ex;
                        }
                    }
                    else
                    {
                        MessageBox.Show("Campo Senha não pode ser vazio..!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtSenha.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("Campo Login não pode ser vazio..!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtLogin.Focus();
                }
            }
    
    /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
    /*
    Vejam que ao clicar no botão logar é feito uma vericação em uma classe chamda ProcedimentosSql se o login e a senha foram validados
    na base dados se Status for True ele irar abrir o Software e FrmLogin.Visible = false;
    
    O problema mesmo é a telinha de Splash que é um outro Form sendo que o processo do mesmo ja ficou pra trás da abertura do 
    controle de usuário e do Software principal.
    */


    segunda-feira, 15 de outubro de 2012 13:22

Respostas

  • Não entendi 100% do que você quiz me passar, somente aparte que determina a quantidade de tempo que a tela de Splash irar ficar aberta, até ai tudo bem..!!

    Vi o video no youtube e o codigo esta o mesmo a diferença é que ao ProcessBar1 for = 100 ele mentem a tela de Splash aberta com a frmLogin no focu sobre o Splash.. der uma olhada no meu codigo do Splash

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Program.Form_Principal
    {
        public partial class frmSplash : Form
        {
            public frmSplash()
            {
                InitializeComponent();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {            
                    if (progressBar1.Value < 100)
                    {
                        progressBar1.Value = progressBar1.Value + 2;
                    }
                    else
                    {
                        timer1.Stop();
                        Form_Principal.frmLoginSenha frmLoginSenha = new Form_Principal.frmLoginSenha();
                        frmLoginSenha.ShowDialog();                
                    }                          
            }
    
            private void Splash_Load(object sender, EventArgs e)
            {           
            //    this.Opacity = 0;
    
            //    for (double i = 0; i < 0.8; i += 0.1)
            //    {
            //        this.Opacity = i;
            //        this.Refresh();
            //        System.Threading.Thread.Sleep(15);
            //    }
            }
            
            private void Splash_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Escape)
                {
                    Application.Exit();
                }
            }
        }
    }
    

    Viu não quero que a tela de frmSplash.Visible = false;

    e sim True até o login ser validado corretamente ou cancelado ou frmProgramaPrincipal seja aberto, frmProgramaPrincipal aberto = fazendo com frmSplash e frmLogin .Visible = false;

    terça-feira, 16 de outubro de 2012 14:59

Todas as Respostas

  • olha só.

    na consegui entender muito bem o teu raciocínio.

    vamos partir do principio.

    a tela splash precisa do timer para ela encerrar.

    você faz o código na tela splash e chama ela na inicialização do teu form de login, mas a aplicação você continua iniciando no form login não no splash.

    na inicialização do form login fica assim:

     public frmLogin()
            {
                //aciona a tela splsh por um determinada tempo na inicializaçao
                Thread t = new Thread(new ThreadStart(SplashScreen));
                t.Start();
                Thread.Sleep(5000);
                t.Abort();
                InitializeComponent();
            }

    através do timer ela irá fechar e abrir o form login que você já tem funcionando, então a partir disso ficou fácil pra você resolver.

    veja este vídeo, caso você não consiga resolver me fala que passo o meu codigo da tela splash e faremos funcionar a sua.

    http://www.youtube.com/watch?v=BI98diMg8oY

    qualquer coisa fala ai.

    • Sugerido como Resposta Marcos_Roberto terça-feira, 16 de outubro de 2012 00:40
    terça-feira, 16 de outubro de 2012 00:40
  • Não entendi 100% do que você quiz me passar, somente aparte que determina a quantidade de tempo que a tela de Splash irar ficar aberta, até ai tudo bem..!!

    Vi o video no youtube e o codigo esta o mesmo a diferença é que ao ProcessBar1 for = 100 ele mentem a tela de Splash aberta com a frmLogin no focu sobre o Splash.. der uma olhada no meu codigo do Splash

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Program.Form_Principal
    {
        public partial class frmSplash : Form
        {
            public frmSplash()
            {
                InitializeComponent();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {            
                    if (progressBar1.Value < 100)
                    {
                        progressBar1.Value = progressBar1.Value + 2;
                    }
                    else
                    {
                        timer1.Stop();
                        Form_Principal.frmLoginSenha frmLoginSenha = new Form_Principal.frmLoginSenha();
                        frmLoginSenha.ShowDialog();                
                    }                          
            }
    
            private void Splash_Load(object sender, EventArgs e)
            {           
            //    this.Opacity = 0;
    
            //    for (double i = 0; i < 0.8; i += 0.1)
            //    {
            //        this.Opacity = i;
            //        this.Refresh();
            //        System.Threading.Thread.Sleep(15);
            //    }
            }
            
            private void Splash_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Escape)
                {
                    Application.Exit();
                }
            }
        }
    }
    

    Viu não quero que a tela de frmSplash.Visible = false;

    e sim True até o login ser validado corretamente ou cancelado ou frmProgramaPrincipal seja aberto, frmProgramaPrincipal aberto = fazendo com frmSplash e frmLogin .Visible = false;

    terça-feira, 16 de outubro de 2012 14:59