Bonjour à tous,


J'ai un petit souci avec les progressbar de des Windows From.

Sur le cas présent elle est utilisé pour indiquer l'avancement du chargement de mon programme. Mais bon le problème est partout.
Lorsque j’incrémente la PB, l'avancement est lent, comme s'il y avait un timer qui l'augmente doucement jusqu'à ma valeur souhaitée, par contre à la décrémentation pas de souci.

Afin d'isoler le souci j'ai créé un petit bout de code avec juste la progressbar.

Une form, 4 textBox pour paramétrer le Minimal, le Maximale, la valeur d’incrémentation et la tempo du timer pour la fonction automatique, 3 boutons pour l’incrémentation, la décrémentation et l'automatique (avec le timer), un label rappelant la valeur que je demande à la progressbar.
une form2 juste pour vous envoyer le texte à l’écran comme j'ai pas de micro.


Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Public Class Form1
    Dim Up As Boolean = True
    Dim v As Integer
    Dim myform As Form2
    Private Sub txtMin_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtMin.TextChanged
        If IsNumeric(txtMin.Text) Then
            ProgressBar1.Minimum = CInt(txtMin.Text)
        End If
    End Sub
 
    Private Sub txtMax_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtMax.TextChanged
        If IsNumeric(txtMax.Text) Then
            ProgressBar1.Maximum = CInt(txtMax.Text)
        End If
    End Sub
 
 
    Private Sub buttonAuto_Click(sender As System.Object, e As System.EventArgs) Handles buttonAuto.Click
        If Timer1.Enabled Then
            Timer1.Enabled = False
        Else
            Timer1.Enabled = True
        End If
    End Sub
 
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If Up Then
            v = v + Val(txtIncr.Text)
            If v > ProgressBar1.Maximum Then
                v = ProgressBar1.Maximum
                Up = False
            End If
        Else
            v = v - Val(txtIncr.Text)
            If v < ProgressBar1.Minimum Then
                v = ProgressBar1.Minimum
                Up = True
            End If
        End If
 
        ProgressBar1.Value = v
        UpdateValue()
 
    End Sub
 
    Private Sub txtIncr_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtIncr.TextChanged
        If IsNumeric(txtIncr.Text) Then
            If Not Val(txtIncr.Text) < Val(txtMax.Text) Then
                txtIncr.Text = 10
            End If
        Else
            txtIncr.Text = 10
        End If
    End Sub
 
    Private Sub buttonPlus_Click(sender As System.Object, e As System.EventArgs) Handles buttonPlus.Click
        If (ProgressBar1.Value + Val(txtIncr.Text)) < ProgressBar1.Maximum Then
            ProgressBar1.Value = ProgressBar1.Value + Val(txtIncr.Text)
        Else
            ProgressBar1.Value = ProgressBar1.Maximum
        End If
        UpdateValue()
    End Sub
 
    Private Sub buttonMoins_Click(sender As System.Object, e As System.EventArgs) Handles buttonMoins.Click
        If (ProgressBar1.Value - Val(txtIncr.Text)) > ProgressBar1.Minimum Then
            ProgressBar1.Value = ProgressBar1.Value - Val(txtIncr.Text)
        Else
            ProgressBar1.Value = ProgressBar1.Minimum
        End If
        UpdateValue()
    End Sub
 
    Private Sub UpdateValue()
        lblValue.Text = CStr(ProgressBar1.Value)
        Application.DoEvents()
    End Sub
 
    Private Sub txtTimer_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtTimer.TextChanged
        If IsNumeric(txtTimer.Text) Then
            Timer1.Interval = Val(txtTimer.Text)
        End If
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        myform = New Form2
        myform.Show()
    End Sub
 
End Class


La vidéo:




J'ai testé l'objet MarqueeAnnimationSpeed, d'ailleurs je ne voie pas a quoi cela sert, mais cela ne change rien en tout cas.
J'ai aussi testé avec des Refresh sur la progressBar ou sur la form.

Mon souci comme je dit dans la vidéo c'est que lorsque c'est rapide, la PB n'a pas le temps d'aller à son maximum. Donc comment accélérer la transition entre 2 incrémentation positive, ou même pour avoir une transition immédiate sans que Windows lisse l’animation.

Merci

Merci de votre aide