IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Pré-chargement de l'affichage d'une form


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Pré-chargement de l'affichage d'une form
    Bonjour à tous.

    Je fais appel à vous car je suis face à un problème que je n'arrive pas du tout à résoudre avec mon faible niveau en .net. Oui, je pense qu'il est utile de préciser que je suis débutant, donc j'ai beaucoup de mal à comprendre l'aide MSDN

    Très simplement, mon logiciel se décompose en deux Form: Form2 (Une sorte de SplashScreen) et une Form1 très très lourde à charger.

    J'aimerai qu'à l'ouverture de la Form2 qui affiche le nom de mon programme, la Form1 se pré-charge pour qu'elle puisse s'ouvrir directement, sans freezer.

    J'ai entendu parlé de BackGroundWorker, mais même en m'inspirant de tuto, je ne comprend pas très bien son fonctionnement et aussi de méthode "Invoke..."

    J'espère que parmi vous, certaine personne pourrons m'aider à résoudre ce problème.
    Bonne après-midi à tous!

    Jules

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    On peut pas initialiser la fenêtre principale dans un autre thread sinon ça va fausser toute l'application. On peut par contre créer le splash dans un autre thread pour l'y maintenir à jour mais franchement on est pas obligé de faire tout ça.

    Bon après c'est du vb (pouah ) il n'y a pas de Program.cs a priori pour customiser l'affichage ... mais dans les propriétés du projet il y a un champ "Écran de démarrage" (j'ai bien dit Écran, pas Formulaire), n'est-ce pas ce que tu cherches pour afficher ton splash ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci smyley.

    J'ai fait ce que tu viens de me proposer, à savoir j'ai mis "fenetre1" dans "Écran de démarrage" tout en laissant "Form2" (Mon SplashScreen) en "formulaire de démarrage".
    Cependant, il n'y a toujours pas de préchargement de ma "fenetre 1". Elle met toujours autant de temps à s'afficher!

    Avec ton aide, j'ai pu faire une recherche sur MSDN, car a coté du choix de l'ecran de démarrage, il y a un bouton intrigant "Afficher les évènement de l'application" sous Viisual Studio 2008 pro.

    Voici le code qu'il propose d'integré:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Private Sub MyApplication_Startup( _
                ByVal sender As Object, _t
                ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
            ) Handles Me.Startup
                ' Get the splash screen.
                Dim fenetre As fenetre1 = CType(My.Application.SplashScreen, fenetre1)
            End Sub

    Sauf qu'après j'ai une erreur d'inter thread.

    Comment puis-je faire pour que cette fenetre1 s'affiche parfaitement dès la sortie du Splash Screen (controlé par un Timer)???

    J'ai l'impression que c'est insoluble non smyley?
    Et puis vu mon niveau, je trouverai pas de parade lol
    Si y'a d'autres solutions, je suis preneur!

    Bonne après-midi à vous tous
    Et encore merci

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Jules24 Voir le message
    J'ai fait ce que tu viens de me proposer, à savoir j'ai mis "fenetre1" dans "Écran de démarrage" tout en laissant "Form2" (Mon SplashScreen) en "formulaire de démarrage".
    Mais non, c'est l'inverse.

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    J'ai essayé autre chose (non mais j'arrive à rien en vb, pourquoi certains font du vb et pas du C# comme tout le monde )

    Alors un projet avec deux forms : Form1 et Form2
    Ensuite :
    Code vb : 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
     
    ' Dans les évènements d'application
     
        Partial Friend Class MyApplication
     
            Protected Overrides Function OnStartup(ByVal eventArgs As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) As Boolean
                Form2.Show()
     
                Return MyBase.OnStartup(eventArgs)
            End Function
     
        End Class
     
    ' Dans Form1
        Protected Overrides Sub OnShown(ByVal e As System.EventArgs)
            Threading.Thread.Sleep(5000) 'Simuler un chargement long
     
            If Form2.Visible Then
                Form2.Hide()
            End If
     
            MyBase.OnShown(e)
        End Sub
    Et pour Form2, la propriété TopMost à True ...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Ca marche mieux en effet, je suis un peu bête parfois!
    Bon la fenetre1 ne se précharge pas totalement mais c'est quand même le jour et la nuit. C'est nettement plus rapide. C'est vraiment parfait

    Cependant, maintenant, ma fenetre1, ne s'affiche pas normalement au dessus des autres, elle s'affiche derrière le dossier depuis lequel j'ai cliqué dessus.
    Je ne veux pas non plus utiliser la propriété TopMost qui va forcer la fenetre à être par dessus tout les autres ouvertes.

    Comment lui redonner une caractéristique classique?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    jvais essayer ta nouvelle méthode smyley

    En tout cas, merci beaucoup de m'aider ^^

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Jules24 Voir le message
    Cependant, maintenant, ma fenetre1, ne s'affiche pas normalement au dessus des autres, elle s'affiche derrière le dossier depuis lequel j'ai cliqué dessus.
    Peut être Me.BringToFront ? ou alors place TopMost à True un instant et le repasser à False après ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Me.BringToFront marche au poil

    En ce qui concerne ta deuxième méthode, j'ai du mal à l'adapter et à la comprendre.

    Dans cette méthode, mon SplashScreen (Form2) = Form1 dans le modèle et ma fenetre1 (Form1) = Form2 ou bien l'inverse?

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    l'inverse.

Discussions similaires

  1. Affichage dans une forme
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 3
    Dernier message: 22/09/2006, 17h03
  2. Question sur l'affichage d'une form dynamique?
    Par Jayceblaster dans le forum Delphi
    Réponses: 1
    Dernier message: 18/09/2006, 14h36
  3. Réponses: 2
    Dernier message: 28/06/2006, 16h50
  4. Affichage d'une forme transparente
    Par cedekasme dans le forum MFC
    Réponses: 5
    Dernier message: 11/01/2006, 15h44
  5. Evénement après l'affichage d'une Form
    Par nikhil dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/06/2005, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo