Bonjour,
Voilà un sujet classique où l'on trouve pas mal de pistes sur internet.
Il s'agit de lancer une appli via un splashscreen, mais de mettre à jour dans un label de ce Splash le % d'avancement de l'initialisation.
J'ai presque réussi à mes fins grâce à des recherches sur le NET.
Le label en question se met bien à jour et les valeurs affichées sont conformes.
Le seul pb, c'est que les autres labels de mon splashscreen (qui pour l'instant est assez rudimentaire), statiques quant à eux et définis dans la procédure Load sont gelés. Malheureusement je n'ai pas réussi à prendre de capture d'écran mais l'affichage de ces autres labels prend la forme d'un rectangle blanc.
Je précise que mon appli est de type WinForms mais démarre sur un sub Main, si bien que le paramètre "Activer l'infrastructure d'application" est désactivé.
Voici mon code :
Pour le splash :
Pour la sub main()
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 Public NotInheritable Class Form_Splash Private Delegate Sub SetTextCallback(ByVal [text] As String) Public Sub SetText(ByVal [text] As String) If Me.LB_Progression.InvokeRequired Then Dim d As New SetTextCallback(AddressOf SetText) Me.Invoke(d, New Object() {[text]}) Else Me.LB_Progression.Text = [text] Me.LB_Progression.Refresh() End If End Sub Private Sub Form_Splash_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If My.Application.Info.Title <> "" Then ApplicationTitle.Text = My.Application.Info.Title Else ApplicationTitle.Text = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName) End If Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, My.Application.Info.Version.Minor, My.Application.Info.Version.Build, My.Application.Info.Version.Revision) Copyright.Text = My.Application.Info.Copyright End Sub End Class
Bref, il doit y avoir un pb de refresh ou c'est la fonction Show qui pose pb (mais je ne peux pas mettre ShowDialog, sinon le reste de la procédure n'est pas lue)
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 Module General Private splash As Form_Splash Public Sub Main() Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) splash = New Form_Splash ... splash.Show() If InitialiseDB() Then ... End Sub Function InitialiseDB() As Boolean Try splash.SetText("Recherche base de données existante") ...
Je ne pense pas que mon pb d'affichage soit lié à la solution mise en oeuvre pour envoyer au Splash les infos concernant la progression de l'initialisation, mais je n'en suis pas sûr non plus.
Par ailleurs, j'ai un petit soucis secondaire. Je souhaiterais appliquer l'astuce du tuto de P. Lasserre pour spécifier un MinimumSplashScreenDisplayTime (§ X-A-3) mais la propriété My.Application.MinimumSplashScreenDisplayTime justement parce que le paramètre "Activer l'infrastructure d'application" est désactivé et que je n'ai donc pas pu spécifier le SplashScreen dans les propriétés du projet.
Merci de votre aide.
Partager