Bonjour, voilà mon petit problème :
J'ai une form1, et pour valider les infos dans ma form et génerer un rapport, je clique sur un bouton, le bouton générer comme sur la photo ci-dessous :
Une fois que je clique sur mon bouton générer, la form1 se ferme et une form2 apparaît, avec une picturebox comportant une image.gif, qui est censé être animée. Cette form2 est une form "d'attente", qui est censé être affiché pendant la génération du tableau de bord, comme l'image ci-dessous :
Attention il ne s'agit pas d'une progressbar malgrès le nom de la form2
Et donc pendant que cette form est affichée, derrière je veux que mon code s'éxécute, et quand il a fini, ma form2 se ferme et uen form3 affiche mon tableau d ebord. Aucun souci à ce niveau là cela fonctionne, mais le seul problème c'est qu'il faut "chainrefresh" la form2 ou la picturebox de la form2 contenant l'image.gif, pour que le mouvement s'effectue, c'est là que vient mon problème.
J'ai essayé avec du doevent, ou du while mais ce n'est pas adapté.
Voici le code de mon bouton "générer" :
En gros moi je veux un truc du genre :
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 Public Sub Btgenerer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btgenerer.Click Dim msg, title As String Dim style As MsgBoxStyle Dim response As MsgBoxResult 'Si aucune date n'a été rentrée, on ne peut continuer, messagebox d'erreur If Txtboxcal.Text = "" Then msg = "Vous n'avez pas sélectionné la date à considérée." ' définit le message style = MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly Or MsgBoxStyle.SystemModal 'définit le style title = "Erreur" ' définit le titre response = MsgBox(msg, style, title) GoTo toto End If 'Gestion de l'affichage Me.Hide() Menu_principal.Refresh() Progressbar.pict1.Size = New Size(69, 66) '30,30 Progressbar.pict1.Location = New Point(100, 70) '83 height Progressbar.pict1.Image = My.Resources.testbis Progressbar.Label2.Text = "Génération en cours" Progressbar.Text = "Génération du tableau de bord" Progressbar.Show() Progressbar.refresh() 'Copie des rapports dans des tables Call CopieRapports() 'Cherche les positions des balises début, fin et absence dans le tableau contenant 'le rapport Call RechercheBalises() 'Extraction 1 Call sub1() Call sub2() Call sub3() Call sub4() Call sub5() Call sub6() Call sub7() 'Extraction 2 Call ExtractionActivity() Call ExtractionTaskMean() Call ExtractionMean() Call CreateTableWeek() Call UpdateTableActivity() Call CreateTM() Call BudgetConsomé() Call BudgetSemaine() 'Génération du Tableau de bord Call Menu_principal.Datagrid1Load() Call Menu_principal.treeview(Menu_principal.Datagrid1, TableActivity, "+", My.Resources.pluss) Call Menu_principal.graphbar() Call Menu_principal.Datagrid2Load() Call Menu_principal.Datagrid3Load() Call Menu_principal.Datagrid4Load() 'Lancement de la phase Calcul Call Calc_affich_nb_os_chef_total() Call Calc_affich_fourn_sstait_total() Call Calcul_affich_nb_materiel_total() Call Feuxetcouleurs() 'On ferme la progressbar Progressbar.Hide() toto: End Sub
OU encore :
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 'Gestion de l'affichage Me.Hide() Menu_principal.Refresh() Progressbar.pict1.Size = New Size(69, 66) '30,30 Progressbar.pict1.Location = New Point(100, 70) '83 height Progressbar.pict1.Image = My.Resources.testbis Progressbar.Label2.Text = "Génération en cours" Progressbar.Text = "Génération du tableau de bord" Progressbar.Show() Progressbar.refresh() 'Tant que ma form2 est ouverte, refresh ma form2.pict1 While Progressbar.visible = true Progressbar.pict1.refresh End While 'On execécute tous mes sub Call mysubs() 'On ferme la progressbar Progressbar.Hide()
Je sais bien que en faisant une boucle while comme je l'ai faite, ma boucle est infinie, donc y a-t-il moyen de lancer une boucle, puis que le sub continue d'exécuter le code situé après, et que quand il rencontre une condition définie dans ma boucle, il arrête la boucle.
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 'Tant que ma form2 est ouverte, refresh ma form2 dim x as integer = 1 While x = 1 Progressbar.pict1.refresh End While 'On execécute tous mes sub Call mysubs() 'Fin de ma boucle x = 2 'On ferme la progressbar Progressbar.Hide()
Il faut sans doute recoller le Call mysubs() dans la boucle while avec un doevents et ma condition après le Call mysubs() ?
J'espère m'être fait comprendre, merci de vos réponses.
Partager