Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181

    [VB.NET] Progress bar che non parte al click del button relativo

    Ciao a tutti, innanzitutto volevo ringraziare tutti coloro che mi hanno aiutato precedentemente ad esportare in excel un datagridview in modo veloce le vostre indicazioni mi sono state molto utili (discussione con titolo Esportare un datagridview in Excel in modo veloce e che trovate qui link )

    Volendo dare un tocco di classe alla mia applicazione vorrei fare in modo tale che ogni volta che eseguo una query per estrapolare i dati da inserire in un dataset e che poi saranno visualizzati in un datagridview, ci fosse una progress bar che mi indichi lo stato della costruzione del dataset e solo al termine dell'incremento della progress bar venga visualizzata la form con il datagridview.

    Analogamente vorrei fare con l'esportazione in excel del datagridview, cioè inserire un progress bar che mi indichi lo stato in percentuale ed alla fine dell'incremento della progress bar un messaggio che mi indichi che il file excel è stato creato.

    Quindi,ho iniziato ad implementare la progress bar per il primo punto e nell'evento click del mio bottone c'è il seguente codice:
    codice:
    ProgressBar.Value = 0
    ProgressBar.Maximum = 100
    ProgressBar.Minimum = 0
    Timer.Interval = 1
    Timer.Enabled = True
    Timer.Start()
    
    'Estrapolazione dei dati dal db
    'Caricamento nel dataset
    'Caricamento del datagriedview nella seconda form
    Form2.Show()
    ed il timer è implementato così
    codice:
    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
       ProgressBar.Increment(1)
       if ProgressBar.Value = ProgressBar.Maximum then
          Timer.Stop()
          Timer.Enabled = False
       End If
       Label.Text = ProgressBar.Value & "%"
    End Sub
    La cosa strana è che la progress bar si incrementa dopo che è apparsa la seconda Form, anche andando a debuggare il codice in effetti la sub Timer_Tick viene eseguita dopo la Sub che implementa l'evento click del mio bottone di estrazione.

    Devo per caso implementare il timer con un thread? Se si allora come mai il timer non parte con lo start().

    Vi chiedo gentilmente di aiutarmi per favore.

    Vi ringrazio in anticipo gcadmin

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Ops chiedo scusa a tutti visto che ho postato la mia discussione non nel posto giusto

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova ad inserire una

    Application.DoEvents()

    subito dopo la

    ProgressBar.Increment(1)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Niente da fare carica la progress bar dopo la visualizzazione della seconda form

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    In termini "tecnici" non so spiegartelo adeguatamente e brevemente..., quindi passo ...posso soltanto dirti che, per quel che so, puoi gestire le Sub e la progressbar all'interno dell' evento 'Timer.Tick' e con una variabile che funge da contatore.
    Nell' esempio sotto (2 form, 1 button, 1 progressbar, 1 timer) dove 'a' è uguale ad' "1,3,5,7,8" sono semplici "tempi di attesa", mentre se uguale a "2,4,6" i 'Console.WriteLine' vanno sostituiti con le tue Sub, 'a' = 9 ferma il timer e apre il form2.
    Nota bene il 'ProgressBar1.Maximum = 8' mentre 'a' arriva a 9, l' IF a=9 non incrementa la progressbar visto che ha raggiunto il massimo con 'a=8'.

    codice:
    Public Class Form1
        Dim a As Integer
        Private Sub Form1_Load() Handles MyBase.Load
            ProgressBar1.Maximum = 8
            Timer1.Interval = 1000
        End Sub
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Timer1.Start()
        End Sub
        Private Sub Timer1_Tick() Handles Timer1.Tick
            a = a + 1
            If a = 1 Then ProgressBar1.Value = ProgressBar1.Value + 1
            If a = 2 Then
                ProgressBar1.Value = ProgressBar1.Value + 1
                Console.WriteLine("Estrapolazione dei dati dal db")
            End If
            If a = 3 Then ProgressBar1.Value = ProgressBar1.Value + 1
            If a = 4 Then
                ProgressBar1.Value = ProgressBar1.Value + 1
                Console.WriteLine("Caricamento nel dataset")
            End If
            If a = 5 Then ProgressBar1.Value = ProgressBar1.Value + 1
            If a = 6 Then
                ProgressBar1.Value = ProgressBar1.Value + 1
                Console.WriteLine("Caricamento del datagriedview nella seconda form")
            End If
            If a = 7 Then ProgressBar1.Value = ProgressBar1.Value + 1
            If a = 8 Then ProgressBar1.Value = ProgressBar1.Value + 1
            If a = 9 Then
                Timer1.Stop()
                Form2.Show()
            End If
        End Sub
    End Class

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Grazie mille Vinsent con il tuo approccio ottengo ciò che volevo.

    Grazie ancora a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.