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

VB.NET Discussion :

Afficher une form Lentement


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 55
    Points : 41
    Points
    41
    Par défaut Afficher une form Lentement
    Bonsoir, la raison de mon post est que je n'ai pas trouvé de sujet similaire sur le forum (ce qui m'étonne, peut-être car je n'ai pas utilise les bons mots clés).
    Je souhaite simplement afficher une form lentement en jouant sur l'opacité, mais je ne sais pas pourquoi malgres differents essais sa ne fonctionne pas.

    Je souhaitai utiliser un sub pour pouvoir appliquer l'affichage lent a n'importe quel form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ' Code bouton
    dim Essai as new threading.thread(addressof AfficherForm)
    Essai.isbackground = true
    Essai.start(form2)
     
    'Code du sub
    Sub AfficherForm(byval FormCible as form)
    FormCible.showdialog()
    FormCible.opacity = 0
    While Not FormCible.opacity = 1
    FormCible.opacity += 0.1
    End while
    End sub
    Mais sa n'a pas fonctionner j'ai donc essayer de simplifier en codant directement dans le "load" d'un form


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'dans le form load:
      Me.Opacity = 0
            While Not Me.Opacity = 1
                Me.Opacity += 0.1
                Threading.Thread.Sleep(100)
            End While
    Sans succès non plus ...

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    quand on change une propriété sur controle, celui ci demande son redessin à lui même pour refléter les changements
    c'est un évènement de redessin qui est mis sur la pile des évènements, qui est donc exécuté quand c'est dépilé, et ca ne peut pas dépiler tant que tu n'es pas sortie de ta sub
    le thread principal servant à ton code et à tout ce qui est rafrichissement de l'interface

    ceci explique pourquoi ton 2ème code ne fait rien


    pour le 1er code il faut savoir que showdialog est bloquant, donc tant que la fenetre n'est pas fermé, les instructions qui sont après sont en attente


    après ton code n'est pas safe, il faut activer option strict on sur le projet, il te soulignera alors les choses qu'il ne faut pas écrire car possibles sources de bug
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    Merci pour ces explications,
    Il me faut donc poursuivre sur le premier code, le probleme étant que "FormCible.show" ou "FormCible.visible = true" m'affiche la form puis la fait disparaitre aussitot

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ci dessous le code qui fait ce que tu cherches avec les explications (classe à mettre dans un fichier)
    ce n'est qu'une façon de faire, il y en a des mieux
    n'hésite pas si tu as des questions sur le fonctionnement

    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
    Public Class FormAnimation
     
        Public Shared Sub ShowAnimation(f As Form)
            f.Opacity = 0
            AddHandler f.Shown, AddressOf FormShown
            f.Show()
        End Sub
     
        Public Shared Function ShowDialogAnimation(f As Form) As DialogResult
            f.Opacity = 0
            AddHandler f.Shown, AddressOf FormShown
            Return f.ShowDialog
        End Function
     
     
     
        Private Shared Sub FormShown(sender As Object, e As System.EventArgs)
            ' sender contient le déclencheur, ici le form
            Dim f As Form = DirectCast(sender, Form)
            Dim t As New System.Windows.Forms.Timer ' on créé un timer qui va géré l'animation
            t.Interval = 80 ' en ms
            t.Tag = f ' pour lier un form à un timer, et donc retrouver le form en fonction du timer (.tag sert à mettre tout et n'importe quoi)
            AddHandler t.Tick, AddressOf OpacityIncrement ' on s'abonne à l'event tick du timer
            t.Start()
            RemoveHandler f.Shown, AddressOf FormShown ' on se désabonne à l'event, il faut toujours se désabonner des events auxquels on s'est abonné quand on en a plus besoin
        End Sub
     
        Private Shared Sub OpacityIncrement(sender As Object, e As System.EventArgs)
            ' sender contient le déclencheur, ici le timer
            Dim t As Timer = DirectCast(sender, Timer)
            Dim form = DirectCast(t.Tag, Form)
     
            If form.Opacity >= 1 Then ' condition d'arrêt et de sortie
                t.Stop() ' arrêt du timer
                RemoveHandler t.Tick, AddressOf OpacityIncrement ' retirer l'abonnement à l'event
                t.Dispose() ' destruction de l'objet en mémoire
                Exit Sub
            End If
     
            form.Opacity += 0.1 'incrément 
        End Sub
     
    End Class
    ca s'utilise comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim f As New Form1
    FormAnimation.ShowAnimation(f)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim f As New Form1
    dim r = FormAnimation.ShowDialogAnimation(f)
    pour du showdialog
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    J'ai mis du temps a comprendre l'utilisation du Haddhandler mais je crois avoir a peu pres saisis, je te remercie de ton aide ainsi que des commentaires.
    Petite question, est il possible d'enlever le temps mort qui est d'environ 2 secondes avant que l'affichage ne commence ?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par peltiarn Voir le message
    J'ai mis du temps a comprendre l'utilisation du Haddhandler mais je crois avoir a peu pres saisis, je te remercie de ton aide ainsi que des commentaires.
    quand tu poses un bouton et que tu doubles clics dessus du arrives dans une sub, préfixée de Handles Button1.Click
    ca signifie que cette sub va être appelé lors de l'event Click de cette instance
    AddHandler / RemoveHandler permet de faire un lien du même type à l'exécution
    (pour info à la compilation le mot clé Handles est transformé en AddHandler + RemoveHandler)

    Citation Envoyé par peltiarn Voir le message
    Petite question, est il possible d'enlever le temps mort qui est d'environ 2 secondes avant que l'affichage ne commence ?
    j'ai fermé ma solution, essaye en mettant 0.3 sur opacity au lieu de 0 au début
    sinon faire en sorte que le timer.interval accélère (.interval = 20 au début, et dans l'event tick faire .interval += 10
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Impossible d'afficher une form dans la barre des taches
    Par padodanle51 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2006, 09h30
  2. [VB.Net] Afficher une form dans un SplitterPanel
    Par nico-pyright(c) dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/04/2006, 20h45
  3. [C#]Afficher une forme sans qu'elle se ferme
    Par gilles641 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/03/2006, 12h25
  4. Afficher une form ou un cadre dans un panel
    Par miniil dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2005, 00h54
  5. [VC++ 6] Boutons permettant d'afficher une form
    Par cooladn dans le forum MFC
    Réponses: 3
    Dernier message: 09/12/2004, 16h17

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