Commen mettre un Panel transparent ou plutôt qui montre l'image derrière de ma Form ?
J'ai mis un Panel dans ma Form mais ma Form comporte un dégradé, hors le Panel n'est pas transprent, j'ai donc un gros carré bleu qui cache le dégradé ?
J'ai beau cherché sur le net, je ne vois pas comment faire ?
J'ai besoin d'un Panel car j'y inclus d'autres contrôlesdans ce Panel dynamiquement et j'ai besoin d'un scrollbar si il y a trop de contrôle, je pense qu'il n'y a que le Panel qui me montre un ScrollBar ?
Ben non tu pense bien que ca, j'aurais su, met sur trasnparent et ca fait rien ! Il n'accepte pas ! J'ai trouvé un moyen de le contourner mais rien, nada !
Si vous pouviez juste essayer ceci, incluez ce petit code dans une form, ensuite ajouter un Panel et mettez le transparent, voyez vous le dégradé ? Moi quand je le mets, je vois même plus mon dégradé sur ma form ?
private void PaintGradient()
{
Rectangle rec = new Rectangle(0,0,this.Width,this.Height);
LinearGradientBrush _brush = new LinearGradientBrush(rec,Color.SkyBlue,Color.DarkBlue,LinearGradientMode.BackwardDiagonal);
Graphics e = this.CreateGraphics();
e.FillRectangle(_brush,rec);
e.Dispose();
_brush.Dispose();
}
en fait ça te permet de voir le fond du form par transparence, toi tu dessines sur le form
SharpMao à du tester en mettant une image de fond, ou une couleur
une solution pourrait etre de dessiner sur un bitmap de la taille de ton form, puis de l'affecter en tant que BackgroundImage du form
maintenant a verifier : ce que ça implique niveau ressources
Au niveau ressource ce qu'il y a de plus performant que de repainter un background c'est de créer une image de l'affecter en background. Et de la repainter que lorsque l'image doit être modifier, lorsque par exemple on a un texte d'affiché.
On y gagne en performance visuelle et en gestion de mémoire.
private Bitmap m_backgroundBmp;
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
// si l'image n'est pas encore dessinée ou si la taille a changer
if ( m_backgroundBmp == null || m_backgroundBmp.Size != new Size(this.Width, this.Height) )
PaintGradient();
}
private void PaintGradient()
{
Rectangle rec = new Rectangle(0,0,this.Width,this.Height);
if ( m_backgroundBmp == null )
{
// premier dessin de l'image
m_backgroundBmp = new Bitmap(rec.Size.Width, rec.Size.Height);
}
else
{
// changement de taille
m_backgroundBmp.Dispose();
m_backgroundBmp = new Bitmap(rec.Size.Width, rec.Size.Height);
}
// dessin
LinearGradientBrush _brush = new LinearGradientBrush(rec,Color.SkyBlue,Color.DarkBlue,LinearGradientMode.BackwardDiagonal);
Graphics e = Graphics.FromImage(m_backgroundBmp);
e.FillRectangle(_brush,rec);
e.Dispose();
_brush.Dispose();
this.BackgroundImage = m_backgroundBmp;
}