Hello,
J'avais besoin dans mon logiciel qu'une barre de progression s'affiche lorsqu'une opération prend un certain temps.
J'ai donc créé une classe avec formulaire (que j'ai appellée "Attente") qui affiche une progressbar dans une nouvelle fenetre et qui l'update au fur et à mesure de l'avancement du traitement.
Tout ça marche bien, mais maintenant, je voudrais permettre à l'utilisateur d'annuler l'opération si elle prend trop de temps.
J'ai donc ajouté un bouton Annuler, une procédure lors de l'évenement click du bouton qui met à vrai un variable booléenne globale que je vérifie à chaque mise à jour de la barre de progression.
Pour résumer, quand on clique sur le bouton annuler, la procédure appelante qui fait une opération longue est averti qu'elle doit arreter le traitement.

Seulement, le problème, c'est que j'ai beau cliquer sur le bouton annuler, rien ne se passe, car l'événement Click de bt_annule n'est jamais déclanché. Je ne sais pas si ça peut venir du fait que la procédure appelante monopolise le processeur?!? Je ne comprend pas Comment faire pour que mon bouton marche correctement?

Merci de votre aide

Voici mon code:

Dans le procédure appelante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Dim att As New Attente
att.Ouvre("Veuillez patienter pendant ...", "Création de ...", nb_iteration, True)
'Traitement 1
For i=0 to nb_iteration
    'Traitement 2
    If att.MAJ(i + 1) Then Exit For
next i
att.Dispose()
Dans ma classe:
Code : 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
Public Class Attente
    Inherits System.Windows.Forms.Form
 
    Dim annule As Boolean = False
 
    Public Sub Ouvre(ByVal Texte As String, ByVal titre As String, ByVal Max As Integer, ByVal annulation As Boolean)
        l_texte.Text = Texte
        Me.Text = titre
        BT_Annule.Visible = annulation
        ProgressBar.Minimum = 0
        ProgressBar.Maximum = Max
        ProgressBar.Value = 0
        annule = False
        Me.Show()
    End Sub
 
    Public Function MAJ(ByVal avancement As Integer) As Boolean
        If avancement > ProgressBar.Maximum Then avancement = ProgressBar.Maximum
        If avancement < ProgressBar.Minimum Then avancement = ProgressBar.Minimum
        ProgressBar.Value = avancement
        ProgressBar.Update()
        Me.Update()
        Return (annule)
    End Function
 
    Private Sub BT_Annule_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Annule.Click
        annule = True
        MsgBox("Voila ce qu'on devrait voir si le bouton annuler renvoyait correctement l'évenement")
    End Sub
End Class
 
----------------------------------------------------------------
 
#Region " Code généré par le Concepteur Windows Form "
 
    Public Sub New()
        MyBase.New()
 
        'Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()
 
        'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
 
    End Sub
 
    'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
 
    'Requis par le Concepteur Windows Form
    Private components As System.ComponentModel.IContainer
 
    'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
    'Elle peut être modifiée en utilisant le Concepteur Windows Form.  
    'Ne la modifiez pas en utilisant l'éditeur de code.
    Friend WithEvents BT_Annule As System.Windows.Forms.Button
    Friend WithEvents l_texte As System.Windows.Forms.Label
    Friend WithEvents ProgressBar As System.Windows.Forms.ProgressBar
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.ProgressBar = New System.Windows.Forms.ProgressBar
        Me.BT_Annule = New System.Windows.Forms.Button
        Me.l_texte = New System.Windows.Forms.Label
        Me.SuspendLayout()
        '
        'ProgressBar
        '
        Me.ProgressBar.Location = New System.Drawing.Point(24, 88)
        Me.ProgressBar.Name = "ProgressBar"
        Me.ProgressBar.Size = New System.Drawing.Size(240, 24)
        Me.ProgressBar.Step = 1
        Me.ProgressBar.TabIndex = 0
        '
        'BT_Annule
        '
        Me.BT_Annule.Location = New System.Drawing.Point(192, 128)
        Me.BT_Annule.Name = "BT_Annule"
        Me.BT_Annule.Size = New System.Drawing.Size(72, 24)
        Me.BT_Annule.TabIndex = 1
        Me.BT_Annule.Text = "Annuler"
        '
        'l_texte
        '
        Me.l_texte.Location = New System.Drawing.Point(24, 16)
        Me.l_texte.Name = "l_texte"
        Me.l_texte.Size = New System.Drawing.Size(240, 56)
        Me.l_texte.TabIndex = 2
        Me.l_texte.Text = "Veuillez Patienter"
        Me.l_texte.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        '
        'Attente
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(288, 166)
        Me.Controls.Add(Me.l_texte)
        Me.Controls.Add(Me.BT_Annule)
        Me.Controls.Add(Me.ProgressBar)
        Me.MaximizeBox = False
        Me.MinimizeBox = False
        Me.Name = "Attente"
        Me.ShowInTaskbar = False
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
        Me.Text = "Attente"
        Me.ResumeLayout(False)
 
    End Sub
 
#End Region