none
ProgressBar

    Pergunta

  • Alguém poderia me ajudar com uma dúvida eu tenho 2 formulários o principal e um de cadastro, bem eu chamo o formulario de cadastro a partir do principal só que como ele acessa uma base de dados ele demora um pouco para mostrar-se então pensei em por uma progressbar enquanto o formulário é carregado alguém ja fez isso podem ajudar

    Att

    Boanerges

    segunda-feira, 1 de janeiro de 2007 04:52

Todas as Respostas

  • Oi Boanerges,

    Sugestão: No formulário de cadastro, incluir um progressBar, dois timers (timerProgBar, com Interval em torno de 250 e timerRotina, com Interval em torno de 500) e usar uma codificação baseada em:

    private void Form2_Load(object sender, EventArgs e)

    {

    timerProgBar.Enabled = true;

    timerRotina.Enabled = true;

    }

    private void timerProgrBar_Tick(object sender, EventArgs e)

    {

    progressBar1.Value = progressBar1.Value + 10;

    if (progressBar1.Value >= 100) progressBar1.Value = 0;

    }

    private void timerRotina_Tick(object sender, EventArgs e)

    {

    timerRotina.Enabled = false;

    Rotina_Carga();

    }

    private void Rotina_Carga()

    {

    // carrega os dados

    }

     Como vê, o importante é separar a carga dos dados para um momento posterior ao Load do formulário.

    Saudações.

    segunda-feira, 1 de janeiro de 2007 20:08
  • Marcio desculpe mas não entendi esse exemplo a dúvida é gerar um formulário com um progressbar até o formulário de cadastros estiver pronto e dai ele inicia-se e é exibido na tela.

    Att

    Boanerges

    segunda-feira, 1 de janeiro de 2007 20:51
  • Boanerges, vc poderia dar uma estudada em System.Threading namespace, talvez ajude no que vc precisa, ou na classe BackgroundWorker. Acredito que isto te ajude.

     

     

    terça-feira, 2 de janeiro de 2007 10:07
  • Cara, eu FIZ isso, não há muito tempo atrás. A boa notícia é que é possível, a má notícia é que não é fácil. Você precisa usar Ajax. A implementação é ligeiramente diferente dependendo do Framework que você está usando, mas basicamente você vai precisar usar o XMLHttp Object, que te permite enviar e receber dados do servidor sem causar um PostBack na página. Eu não sou nenhum especialista em JavaScript, muito menos em Ajax, então a coisa ficou meia cru, mas funciona (aliás, adoraria que alguém me ajudasse a melhorar).
    Basicamente, vc precisa implementar um Callback na sua página. Se vc estiver usando a Framework 2.0, ele já tem o callback implementado em alguma interface que eu não lembro, mas se o seu framework for 1.1, vc faz o callback passando um parametro na sua URL, verificando esse parametro e dando um return direto, o que para a função Page_Load e impede o PostBack, mais ou menos assim:

    private void Page_Load(object sender, System.EventArgs e)
    {
        if(isCallback())
        {
            return;
        }
    }

    private bool isCallback()
    {
        if(Request.QueryString["callback"]==null && !IsPostBack)
        {
            return false;
        }

        Response.Write("<input runat=\"server\" type=\"hidden\" id=\"contador\" name=\"contador\" value=\""+i.ToString()+"\">");
        return true;
    }

    A maneira como eu fiz para causar o progresso da barra foi, como vc pode ver la em cima, na função callback criar um campo oculto no html enviado que continha a tal variavel e depois ler esse campo usando JavaScript no cliente. Tenha em mente que dependendo do que vc pretende fazer, vc precisara usar uma thread separada para o processo, e se vc fizer isso, vc vai precisar jogar essa variavel pra sessão, e pegá-la de volta na thread principal antes de criar o campo oculto no html.
    terça-feira, 2 de janeiro de 2007 10:41
  • Vlw Luiz vou estudar mesmo migrei pra .net a pouco tempo e conheço poucos controles obrigado pela ajuda. Leahn o aplicativo que estou desenvolvendo é windows form não asp.net vlw pela tentativa 

    Att

    Boanerges

    terça-feira, 2 de janeiro de 2007 13:31
  • Oi Boanerges,

    Não se trata de outro Form, mas sim do próprio Form de Cadastro que conterá o progressBar.

    A ativação da Rotina de Carga dos Dados do Cadastro deverá ser fora do Form_Load e posterior ao início do progressBar, para evitar que o progressBar só apareça no final da Carga.

    No final dessa Rotina, o progressBar deverá ser deativado.

    Saudações

     

    quinta-feira, 4 de janeiro de 2007 09:06
  • legal Marcio eu desisti de por uma progress bar quem sabe um dia eu aprendo, eu fiz isso em vez de por a progress bar eu mudei o cursor para Wait ou seja a ampulheta e quando o form termina de ser carregado volto para o default o q achou parece ser válido tbm né?

    Att

    Boanerges

    sábado, 6 de janeiro de 2007 17:48