Usuário com melhor resposta
Problema com tela de Splash

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. */
- Editado Configuração app.config segunda-feira, 15 de outubro de 2012 13:24
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;
- Marcado como Resposta Configuração app.config sexta-feira, 14 de dezembro de 2012 10:43
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
-
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;
- Marcado como Resposta Configuração app.config sexta-feira, 14 de dezembro de 2012 10:43