Moundir76
Messages postés281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014
-
21 août 2013 à 09:19
Moundir76
Messages postés281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 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".
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 21 août 2013 à 14:46
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és281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 21 août 2013 à 15:55
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és3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 22 août 2013 à 00:57
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
Zermelo
Messages postés378Date d'inscriptionsamedi 22 septembre 2012StatutMembreDernière intervention13 août 201714 21 août 2013 à 14:47
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és281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 21 août 2013 à 15:56
Bonjour Zermelo,
Les messages se sont croisés, et votre méthode est la même que celle de ShayW...
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és281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 22 août 2013 à 08:39
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és281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 22 août 2013 à 09:37
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....
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és281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 23 août 2013 à 09:01
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.
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 22 août 2013 à 11:35
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és281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 22 août 2013 à 12:51
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...
21 août 2013 à 15:55
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...
22 août 2013 à 00:57
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