Opacité d'un panel [Résolu]

Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
- - Dernière réponse : Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
- 23 août 2013 à 09:01
Bonjour,

J'ai sur une form un TabControl.
Sur ce TabControl j'ai une ProgressBar qui se remplit au fur et a mesure d'un traitement.
Une fois ce traitement terminé, j'ai un panel qui vient se "poser" au dessus du tabcontrol.

Sur ce panel j'ai 3 composants : 2 boutons et un datagridview.

Je voudrais changer l'opacité de ce panel, afin que l'on puisse voir la progressbar qui est caché par ce panel. sans pour autant que le panel soit transparent.

Je ne suis surement pas très clair mais je ne vois pas comment m'expliquer...

J'ai déjà fait des recherches et j'ai trouvé qu'il était impossible de faire cela avec le composant panel de "base".

Je ne vois pas comment my prendre...


Une idée ?

Merci d'avance

--
Afficher la suite 

Votre réponse

4 réponses

Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
0
Merci
Salut
peut etre ainsi (pas de moi mais dans le web)


SetTransparency(Me.Panel1, 50)



Public Sub SetTransparency(ByRef ctrl As Control, ByVal percentTransparent As Integer)

Dim alpha As Decimal = percentTransparent / 100 * 255

ctrl.BackColor = Color.FromArgb(alpha, ctrl.BackColor)

End Sub
Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
-
Salut ShayW,

Merci pour ta réponse, j'avais déjà essayé sans succès (quasiment le même code) ...

Cependant j'ai remarqué que cette technique fonctionne dans un cas :

Si sur notre form on mets une BackgroundImage, alors le panel sera transparent et on verra l'image... Mais pas dans le cas ou des controles sont sous le panel...
cs_ShayW
Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
-
le code a quelques erreurs
 Public Sub SetTransparency(ByVal ctrl As Control, ByVal percentTransparent As Integer)

        Dim alpha As Double = percentTransparent / 100 * 255

        ctrl.BackColor = Color.FromArgb(Convert.ToInt32(alpha), ctrl.BackColor)

    End Sub


Si sur notre form on mets une BackgroundImage, alors le panel sera transparent et on verra l'image... Mais pas dans le cas ou des controles sont sous le panel...

oui j'ai remarqué aussi
et si tu mets dans le fond un panel ou un picturebox de la taille de la form avec une backgroundimage cela ne fonctionne pas non plus
Commenter la réponse de cs_ShayW
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Dernière intervention
13 août 2017
0
Merci
Bonjour Moundir76

Le code suivant
Imports System.Drawing.Color
Public Class Accueil

    Private Sub Panel1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.Click
        Dim A As Byte, R As Byte, G As Byte, B As Byte
        With Panel1.BackColor
            R = .R
            G = .G
            B = .B
        End With
        A = 100 : Panel1.BackColor = FromArgb(A, R, G, B)
    End Sub

End Class

vous sera peut-être utile.
Cordialement.
Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
-
Bonjour Zermelo,

Les messages se sont croisés, et votre méthode est la même que celle de ShayW...

Merci quand même !
Commenter la réponse de Zermelo
0
Merci
Salut à tous,

Utilise un form (formborderstyle a none et location = Me...) au lieu d'un panel. Et de régler ensuite sa propriété Opacity à la valeur souhaitée.
Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
-
Salut Banana,

Ce que tu me suggères c'est de créer une form de façon dynamique qui contiendra une datagridview elle aussi créé de façon dynamique ?


Un peu comme ce code qui ne fonctionne pas ? ^^
Dim f As New Form
        f.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        f.Location = New System.Drawing.Point(10, 10)
        f.Size = New System.Drawing.Size(600, 150)
        f.TopLevel = False
        Me.Controls.Add(f)
Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
-
J'ai réussi à faire quelquechose :
Dim f As New Form

        f.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        f.Location = New System.Drawing.Point(10, 10)
        f.Size = New System.Drawing.Size(600, 150)
        f.TopLevel = False

        f.BackColor = Color.Blue
        Me.Controls.Add(f)
        f.Show()
        f.BringToFront() 'Pour passer la form devant un control

        f.Opacity = 0.2 'Ne change rien....
Utilisateur anonyme -
Je t'ai proposé une astuce. Peut-être faudrait-il revoir la conception de ton système pour parvenir à tes fins. L'avantage d'un form, c'est que son opacité se règle facilement, qu'il peut prendre n'importe quelle forme (voir sa propriété Region) et qu'il peut accueillir n'importe quel contrôle. L'inconvénient c'est qu'il ne peut devenir l'enfant de ton form principal. Cependant, il peut être positionné suivant l'événement Move de ton form principal.
Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
-
Hello,

Oui tout à fait car actuellement cela ne sera pas possible.

"L'inconvénient c'est qu'il ne peut devenir l'enfant de ton form principal"

Et c'est bien ce qui m'embete avec cette solution ...

Je vais me débrouiller pour faire quelque chose avec ça.

Merci pour ton aide !

A+
Commenter la réponse de Utilisateur anonyme
Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
0
Merci
en relisant ta question une chose n'est pas clair
tu veux obtenir un panel ou form transparent pour faire voir le progressbar
mais tu dis
Sur ce TabControl j'ai une ProgressBar qui se remplit au fur et a mesure d'un traitement.
Une fois ce traitement terminé, j'ai un panel qui vient se "poser" au dessus du tabcontrol.

si le traitement est terminé pourquoi continuer à afficher le progressbar
Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
-
Pour résumer,

J'ai un application (Form1).

Sur cette application, j'ai mis un TabControl, permettant d'avoir des onglets. Et j'ai justement un onglet : "Import d'un fichier".

Dans cet onglet j'ai une progressbar (qui permet de voir l'avancement de l'import). Cependant, avant d'importer dans la BDD, j'affiche sur un panel, les valeurs qui vont être insérées, afin que l'utilisateur les visualise, puis il appuie sur confirmer et le traitement se fait, mais cette fois ci avec un import dans la BDD.

C'est pour cela que la progressbar est utilisée deux fois.

Je viens de faire une modification qui "cache" ce panel quand l'utilisateur a confirmé. Cela revient presque au même, c'est juste que j'aurais aimé faire un changement avec l'opacité du panel...
Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.