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

C# Discussion :

Apparition lente d'un form


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Apparition lente d'un form
    Bonjour,
    Je cherche à faire apparaitre une form lentement.
    Voici mon code, j'ai tenté d'ajouter refresh ou update sans succès.

    public Form1()
    {
    InitializeComponent();

    for (int i = 10; i < 100; i+=5)
    {
    this.Opacity = (int)(i / 100);
    Thread.Sleep(200);
    }
    }

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 340
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 340
    Points : 20 324
    Points
    20 324
    Par défaut
    essayer avec une valeur modulo et si la condition est remplie alors jouer sur l'opacité

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 002
    Points : 5 410
    Points
    5 410
    Par défaut
    Voila qui devrait faire ton bonheur :


  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 340
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 340
    Points : 20 324
    Points
    20 324
    Par défaut
    voilà du code tout simple qui fonctionne et éviter d'utiliser Sleep

    1-suir le formulaire mettez un Timer et le paramétrer selon un certain intervalle de temps mettons 500 ms
    2-dans les événements du timer paramétrer un événement timer1_Tick()

    3-taper ce code
    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
     
    public partial class Form1 : Form
        {
            int MaxVal=0;
            public Form1()
            {
                InitializeComponent();
                this.Opacity=0.1;
                timer1.Enabled = true;
     
            }
     
    private void timer1_Tick(object sender, EventArgs e)
            {
                this.Opacity += 0.1;
                MaxVal++;
                if (MaxVal == 10) 
                {
                    this.timer1.Enabled = false;
                }
            }
    Il est conseillé de détruire l'instance de timer si vous n'en avez plus besoin

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    995
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 995
    Points : 1 449
    Points
    1 449
    Par défaut
    Ton code devrait être plutôt dans le Form_Load
    Sinon si tu divises 10 par 100 et que tu convertit en entier, ça fera toujours 0; Opacity attend un float
    Et comme tu t'arrêtes avant 100, la fenêtre ne sera jamais totalement opaque

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Ca ne fonctionne pas
    Bonjour et merci pour ton aide
    J'ai tenté mais ça ne marche pas
    L'opacité reste au niveau initial

    Citation Envoyé par Mat.M Voir le message
    voilà du code tout simple qui fonctionne et éviter d'utiliser Sleep

    1-suir le formulaire mettez un Timer et le paramétrer selon un certain intervalle de temps mettons 500 ms
    2-dans les événements du timer paramétrer un événement timer1_Tick()

    3-taper ce code
    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
     
    public partial class Form1 : Form
        {
            int MaxVal=0;
            public Form1()
            {
                InitializeComponent();
                this.Opacity=0.1;
                timer1.Enabled = true;
     
            }
     
    private void timer1_Tick(object sender, EventArgs e)
            {
                this.Opacity += 0.1;
                MaxVal++;
                if (MaxVal == 10) 
                {
                    this.timer1.Enabled = false;
                }
            }
    Il est conseillé de détruire l'instance de timer si vous n'en avez plus besoin

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 340
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 340
    Points : 20 324
    Points
    20 324
    Par défaut
    Citation Envoyé par Frédéric Desavoie Voir le message
    Bonjour et merci pour ton aide
    J'ai tenté mais ça ne marche pas
    est-ce que vous avez bien mis un "timer" sur la "Form" ?
    Et comme l'écrit très bien unfred effectivement il vaut mieux éviter de placer ce code dans le constructeur mais plutôt dans le "form load"

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 753
    Points : 10 687
    Points
    10 687
    Billets dans le blog
    21
    Par défaut
    Une Winform a un cycle de vie, et il est important d'en tenir compte.

    Changer l'opacité dans le constructeur ou le Form_Load n'a absolument aucun intérêt, puisque la fenêtre n'est alors... pas encore visible !

    La bonne solution est bien de passer par un timer.

    Autre chose : il faut impérativement éviter les instructions comme Sleep dans les méthodes d'une form, car cela créer un blocage tant que la méthode n'est pas terminée (cf. le concept de boucle d'événements), blocage durant laquelle la form ne sera pas mise à jour (= redessinée).

    La bonne solution ici consiste donc à passer par un timer pour la modification de l'opacité. La création du timer dans le constructeur ou le Form_Load n'est pas le plus efficace ici, car ce qui est important pour un effet visuel, ce n'est pas la création du formulaire en tant que telle mais l'affichage du formulaire

    Il faut donc :
    • créer le formulaire ;
    • mettre son opacité à 0 dans le constructeur ;
    • souscrire à l'événement adéquat (par ex. Shown) ;
    • dans cet événement, créer le timer (ne pas oublier de lui fournir le délai entre chaque tick et le callback qui sera appelé !!) ;
    • dans le timer, relevé l'opacité jusqu'à obtenir une valeur de 1 ;
    • détruire le timer devenu inutile.


    L'idée derrière, c'est que dès que la fenêtre sera affichée, alors elle le sera avec une opacité de 0 et l'événement Shown sera appelé. Ainsi, via le timer, l'opacité de la fenêtre devrait se mettre à jour automatiquement.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. [Débutant] Apparition Windows form en haut de l'ecran
    Par a.floranc dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/09/2012, 22h14
  2. ma Form est lente à charger à cause des stackpanel dans mon grid apparement
    Par slacky dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 21/12/2011, 14h17
  3. MDI Form lente à afficher
    Par Knightrider dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/11/2009, 04h14
  4. compilation forms lente
    Par chouchou36 dans le forum Forms
    Réponses: 0
    Dernier message: 24/03/2009, 10h50
  5. Réponses: 6
    Dernier message: 08/03/2007, 18h23

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