2009-02-04 7 views
1

Je remplis l'arrière-plan de certains formulaires WinForms VB.NET 2005 avec un joli dégradé (en surchargeant l'événement OnPaint). Cela fonctionne correctement, mais les différentes étiquettes, etc. du formulaire s'affichent avec un arrière-plan uni même après avoir défini BackColor sur Color.Transparent. Définir la clé de transparence du formulaire lui-même semble affecter cela mais je ne peux pas obtenir les étiquettes pour avoir une BackColor vraiment transparente, y a-t-il un moyen facile de contourner cela ou est-ce que je regarde des contrôles personnalisés etc.Arrière-plans de contrôle transparents sur une forme dégradée VB.NET?

Répondre

4

Ajoutez une nouvelle classe à votre projet et collez le code ci-dessous. Construire. Déposez le nouveau contrôle du haut de votre boîte à outils sur votre formulaire.

Public Class TransparentLabel 
    Inherits Label 

    Public Sub New() 
     Me.SetStyle(ControlStyles.Opaque, True) 
     Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, False) 
    End Sub 

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams 
     Get 
      Dim cp As CreateParams = MyBase.CreateParams 
      cp.ExStyle = cp.ExStyle Or &H20 ' Turn on WS_EX_TRANSPARENT 
      Return cp 
     End Get 
    End Property 
End Class 

Le scintillement peut être perceptible, pas de solution.

1

Après quelques essais que j'ai trouvé que les œuvres suivantes pour les fonds de forme de remplissage Gradiant et préserver la transparence de l'étiquette:

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 

    Dim formGraphics As Graphics = e.Graphics 
    Dim gradientBrush As New LinearGradientBrush(New Point(0, Height), New Point(0, 0), Me.AppSettings.FormGradiantFrom, Me.AppSettings.FormGradiantTo) 

    formGraphics.FillRectangle(gradientBrush, ClientRectangle) 

End Sub 

Et en cas de charge de forme:

SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or _ 
       ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True) 
+0

I mis en œuvre la solution décrite mais j'ai un problème: lorsque je fais glisser mon formulaire, l'arrière-plan capturé dans la position précédente est déplacé vers la nouvelle position ... –

Questions connexes