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 :

Control transparent qui ne reçoit pas le invalidate du contenair


Sujet :

Windows Forms

  1. #1
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut Control transparent qui ne reçoit pas le invalidate du contenair
    Bonjour.

    J'utilise dans mon appli des controls personnalisées "transparents" qui me permettent de conserver le background des forms comme ceci :

    Pièce jointe 18981

    Pour ce faire, tous les controls personnalisés utilisent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Protected Overrides ReadOnly Property CreateParams() As CreateParams
            Get
                Dim cp As CreateParams = MyBase.CreateParams
                cp.ExStyle = cp.ExStyle Or &H20
                Return cp
            End Get
        End Property
    J'ai constaté que l'invalidation d'une partie de la form (du type déplacement d'une autre form au dessus de celle-ci), ne provoque pas le redessin des controls (pas d'invalidate des controls enfants de la form ???).

    Ca donne ça (c'est trés frustrant) :
    Pièce jointe 18982

    En supprimant le code ci-dessus les controls sont bien redessinés (mais évidemment ça ne ressemble plus à rien du fait du gradient que j'utilise sur la form).

    Des appels au invalidate des controls sur le onpaintbackground de la form me semble une méthode un peu sauvage pour contourner cela.

    La question est donc : y-a-t'il moyen en jouant sur le ExStyle de résoudre se probléme ?

    Cdt.

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Re.

    Bon j'ai une solution de contournement trouvé ici :
    http://componentfactory.blogspot.com...-controls.html

    Ne pas utiliser le createparams et forcer dans le onpaintbackground le redessin du parent :
    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
     
       Private Sub PaintParentBackground(ByVal e As PaintEventArgs)
            If Not Me.Parent Is Nothing Then
                Dim rect As Rectangle = New Rectangle(Left, Top, Width, Height)
                e.Graphics.TranslateTransform(-rect.X, -rect.Y)
                Dim pea As PaintEventArgs = New PaintEventArgs(e.Graphics, rect)
                pea.Graphics.SetClip(rect)
                InvokePaintBackground(Parent, pea)
                InvokePaint(Parent, pea)
                e.Graphics.TranslateTransform(rect.X, rect.Y)
            End If
        End Sub
     
        Protected Overrides Sub OnPaintBackground( _
            ByVal pevent As PaintEventArgs)
            PaintParentBackground(pevent)
            ' rien
        End Sub
    Je ne mets pas en résolu car ça reste du contournement à mon sens...

    Cdt.

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bon bon...

    Finalement la meilleure solution reste de jouer sur la region du control et là tout fonctionne nickel.

    La solution de repeindre le background du control parent ne fonctionne pas pour des tabcontrols (--> boucle entre le tabpage affiché et le tabcontrol via la form).

    Donc résolu.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2008, 11h22
  2. un control JS qui ne fonctionne pas sur une FORM
    Par redabadache3 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/12/2007, 15h43
  3. Form qui ne reçoit pas des events
    Par eliek_9 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 26/07/2006, 15h45
  4. [VB.NET]Control.CreateControl qui ne marche pas
    Par noogatix dans le forum Windows Forms
    Réponses: 13
    Dernier message: 16/06/2006, 16h23
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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