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 :

Supprimer le redessinement automatique d'un contrôle


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Par défaut Supprimer le redessinement automatique d'un contrôle
    Bonjour,

    J'ai écrit un petit bout de code qui met en jeu pas mal de contrôles qui se déplace dans un Panel. J'ai une boucle qui s'occupe de déplacer chaque contrôle selon un ordre précis.

    (je reste volontairement flou dans l'application parce que c'est pas vraiment nécessaire de décrire complètement le fonctionnement de mon truc qui pour l'heure, ne sert à rien)

    Parce que contrôles sont redessinés les uns après les autres, il y a un espèce de sintillement qui me déplait pas mal. J'avais eu l'idée de faire un SuspendLayout(); et un ResumeLayou(); mais cela n'empêche rien.

    Ce que je cherche à faire maintenant c'est de surcharger la méthode qui s'occupe de redessiner mon panel et ses enfants le temps de déplacer l'ensemble de mes objets. Après quoi je lance un petit Invalidate();

    Je n'ai pas trouvé comment surcharger cette méthode. Je n'ai d'ailleurs pas trouvé de quelle méthode il s'agit.

    Dans l'idée ce serait de faire quelque chose comme ça:

    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
    bool _suspendRePaint = false;
     
    void RedispositionDesControles()
    {
       _suspendRePaint = true;
       [...]
       _suspendRePaint = false;
    }
     
    override void RePaint() // Methode système don't j'ignore l'existence. 
    {
       if(_suspendRePaint)
          return;
       else
          base.RePaint()
    }
    Avez-vous une idée?

  2. #2
    Expert confirmé
    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
    Par défaut
    Override OnPaint et OnPaintBackground pour faire ce que tu veux.

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    La méthode suspendLayout() sert à désactiver certains événements d'un contrôle, il n'a aucun effet sur le redessinement d'un contrôle. Pour le scintillement on peut utiliser la classe BufferedGraphics.

  4. #4
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Par défaut Ca avance mais c'est pas encore ça
    Merci pour vos réponses, j'ai pu avancer un petit peu. En effet SuspendLayout(), n'a aucune influance sur le flickering de mes objets.

    J'ai essayé de surcharger les méthodes OnPaint et OnPaintBackground mais j'ignorais quelque chose. Surcharger ces méthodes n'a aucun effet sur les enfants de mon contrôle surchargé.

    Je pourrais surcharger récursivement tous les enfants de mon contrôle le temps de tous les déplacer mais je doute que ce soit la meilleure solution. N'y a-t-il pas moyen de supprimer le redessinement d'une zone à l'écran. Une sorte de InvalidateInverse(rect monRectangle) ?

    Enfin j'ai regarder un peu BufferedGraphics mais j'ai l'impression que cela s'applique surtout à un élément Graphics et non à des objets instanciés dans mon form. Me trompe-je ?

    Tout ceci m'amène à une troisième question. Les enfants de mon Panel principal sont en réalité d'autres panels dans lequel j'ai un élément PictureBox dont l'image est chargée une fois pour toute. Je n'ai pas la nécessité de changer dynamiquement l'image. Aurais-je plutôt intéret à utiliser un objet Graphics dans lequel je dessine mon image au lieu d'utiliser un élément PictureBox ?

Discussions similaires

  1. Supprimer l'authentification automatique sur un PC distant
    Par Le_Jack dans le forum Sécurité
    Réponses: 1
    Dernier message: 04/08/2007, 13h57
  2. Réponses: 9
    Dernier message: 12/01/2007, 18h53
  3. [C#][2.0] Création automatique d'un contrôle
    Par just1980 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/12/2006, 15h32
  4. Réponses: 3
    Dernier message: 16/08/2006, 14h55
  5. Supprimer un controle automatique
    Par karimfl dans le forum MFC
    Réponses: 1
    Dernier message: 18/04/2006, 21h36

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