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 :

Problème de rafraichissement des controles d'un formulaire


Sujet :

Windows Forms

  1. #1
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 465
    Points
    465
    Par défaut Problème de rafraichissement des controles d'un formulaire
    Bonjour,

    Lorsque mon application n'est pas au premier plan et que je fait passer au dessus d'elle une fenêtre de Windows, ou une autre application, les Controles font une sorte de "capture d'écran" (plus flangrant avec les PictureBox) de l'objet qui passe dessus pendant quelques centièmes de secondes, puis reprennent leur apparence normale.

    Comment éviter cela ? La moindre information sera la bienvenue Merci !

    NB : Comme s'est un peu difficile à expliquer, j'ai fait une capture d'écran, volontaire celle-ci
    Images attachées Images attachées  

  2. #2
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 465
    Points
    465
    Par défaut
    En continuant à chercher je viens de trouver le "responsable" Mon formulaire à une BackgroundImage de 850x375 pixels au format BMP. Elle pèse 1.3 Mo. Si je la supprime, le problème est résolu !

    Maintenant, je dois trouver une solution me permettant de concerver cette image indispensable, tout en supprimant le problème...

  3. #3
    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
    une méthode simple pour tricher, créer un bufferedgraphics sur onsizechanged et le render sur onpaintbackground (les 2 en overrides tant qu'à faire)

    que l'image soit en bmp ou jpeg, je ne pense pas que ca change grand chose ... m'enfin je dis ptete des conneries meme si ca me paraitrait logique
    sinon essaye en convertissant ton bmp en jpeg pour vérifier mes propos
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    J'ai connu ce probleme de lag avec les fonds utilisant des images de grande taille.
    Je confirme que (à l'epoque) le format importe peu et que c'est la taille qui rentre en jeu.
    De memoire, j'avais essaye de magouiller par x moyens mais tous sans resultat ...

    Si tu regardes bien, tu verras aussi que l'affichage des controls de tes forms est beaucoup plus rapide sans l'image de fond.

    Sperot, tu dis : une méthode simple pour tricher, créer un bufferedgraphics sur onsizechanged et le render sur onpaintbackground (les 2 en overrides tant qu'à faire)
    Tu peux developper ta pensee ?

    Sinon arnomedia, as-tu essaye le wpf, il parait que ca regle tous les problemes de lag et de lenteur d'affichage des forms graphiques et complexes ?
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  5. #5
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 465
    Points
    465
    Par défaut
    Le WPF... j'ai cru une seconde que c'était un format d'image Je me suis dit trop bien, excelent... j'ai ouvert Photoshop... Ah non c pas un format d'image... Une petite recherche sur google me fait dire ba pas grand chose en fait C'est quoi au juste ce truc ? Si c'est un langage, j'arrive à la fin du dev de mon petit soft, alors bon...

    Sinon, dans les extentions dispo du BackgroundIamge, y'a le WMF, mais Photoshop ne me propose ce format.

    J'ai essayé ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim myBMP As New Bitmap(Me.BackgroundImage) ' je recup l'image
            Me.BackgroundImage = myBMP
    mais ça ne change rien. Enfin si, c pire...

    sperot51 : Si j'étais une fille, je tomberais amoureux tellement tu viens souvent à mon secours mais par contre j'ai pas compris grand chose là

  6. #6
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 465
    Points
    465
    Par défaut
    Problème résolu !

    Pour commmencer, j'ai laissé tomber ce BackgroudImage à moitié naze de la Form Ma Form se retrouve donc avec une BackColor=Control

    Ensuite j'ai splité mon image de fond en 4 ("Outil Tranche" ds Photoshop) afin de créer 4 images donc, de plus petite taille.

    Puis dans le code, j'ai créé 4 PictureBox en leur attribuant une image à chacun. J'ai utilisé la méthode "= Image.FromFile(path\monFichier)" que j'ai positionné dans une procédure MyBase.Load

    NB : Je suis passé par le code pour créer les PictureBox pour ne pas encombrer inutilement la partie Design de la Form.

    Je n'ai qu'une Form, mais avec plusieurs, j'imagine que cette méthode peut devenir vite fastidieuse. Elle a aussi pour inconvénient de devoir intégrer les images au dossier de l'application. Enfin, cette solution n'est sans doute pas "très propre", mais elle est facile à mettre en oeuvre et fonctionne parfaitement, dans mon cas...

    Pour info, mes images font en moyenne 380x300 pixels. Je n'ai pas eu besoin d'essayer avec des images plus grandes. Je confirme que c'est bien la taille de l'image qui importe et non son format d'enregistrement.

    Merci Danyel et sperot51 pour m'avoir mis sur la voie

  7. #7
    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
    wpf c'est chiant au début quand on vient de windows forms, et pi faut oublier totalement la méthode de développement enfin surtout le passage des données dans l'affichage

    mais une fois qu'on y a gouté, on y prend gout, c'est vraiment puissant



    pour expliquer ce que je dis, à chaque evenement paint (venant des messages windows) l'image va etre redessinée, via un graphics.Drawimage
    vu la taille, et le nombre d'évènement paint quand on glisse une fenetre par dessus (enfin sur xp, parce que sur vista on s'en prend aucun, c'est très optimisé) ca lag
    donc le but c'est de créé un bufferedgraphics, l'instancier sur onsizechanged car si la taille de la fenetre change, il faut la taille du buffer, déssiner l'image dans le buffer
    ne pas mettre l'image dans la propriété backgroundimage de la feuille
    et sur onpaint, faire buffer.render
    render prend largement moins d'une milliseconde

    si faut gérer la transparence des controles au dessus ca fait un peu plus de code encore ... mais les windows forms ne sont pas faites pour la transparence en pratique meme si c'était prévu en théorie
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 465
    Points
    465
    Par défaut
    J'ai pas encore utilisé tout ça, mais je vois plus ou moins ce que tu veux dire, plutot moins que plus qd même Ma Form n'est pas redimentionable et comme ça marche comme ça, je vais passer à autre chose, mais merci pour l'explication. C'est Danyel qui va être content

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

Discussions similaires

  1. UpdatePanel rafraichissement des controles
    Par Magjjy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/10/2007, 11h57
  2. VBA Excel vs web - mauvais rafraichissement des controles
    Par Kraaan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/02/2007, 11h19
  3. déplacement des controles dans 1 formulaire ou etat
    Par arseno dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/08/2006, 19h59
  4. [Rave] problème de rafraichissement des dataview
    Par Rayek dans le forum Bases de données
    Réponses: 8
    Dernier message: 06/03/2006, 16h38
  5. Envoyer des controles d'un formulaire dans un tableau
    Par CB56 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/11/2005, 10h43

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