Dégradé Backcolor ?

cs_ansizak Messages postés 191 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 30 juin 2011 - 12 nov. 2008 à 10:45
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 12 nov. 2008 à 19:37
Bonjour,

Je n'ai pas réussi à appliquer un dégradé à la propriété backcolor d'un control:

LinearGradientBrush b = new LinearGradientBrush(new Point(0, 0), new Point(60, 20), Color.Gray, Color.White);
Graphics g = paneltest.CreateGraphics();
g.FillRectangle(b, 0, 0, paneltest.Width, paneltest.Height);

Pourriez vous m'aiguiller ?

Merci d'avance,

Anz.

10 réponses

LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
12 nov. 2008 à 10:55
La propriété BackColor ne prend pas de dégradé en paramètre à moins de réécrire dessus (override) mais ça te sera compliqué et couteux. Le mieux c'est de créer ta propre propriété et de supprimer celle de ton control enfin mettre browsable à false.

La connaissance est la plus grande des richesses.
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
12 nov. 2008 à 10:57
Je l'ai déjà en VB, si tu veux je peux te l'envoyer ce soir, la je suis au boulot.

La connaissance est la plus grande des richesses.
cs_ansizak Messages postés 191 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 30 juin 2011
12 nov. 2008 à 10:59
Je te remercie, je veux bien voir ta propriété vb :)

Je regarderais ce soir.

Merci,
Cordialement,
Anz
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
12 nov. 2008 à 11:24
Salut,

Pour créer un dégradé, tu dériver une nouvelle classe de ton controle et surcharger onPaintBackground:

class MyGradientPanel:Panel
{

Color _color1 = Color.Blue;
Color  _color2 = Color.White;

protected override void OnPaintBackground(PaintEventArgs e)
        {
            base.OnPaintBackground(e);
            Graphics g = e.Graphics;
            g.FillRectangle(Brushes.White, ClientRectangle);

            Brush linearGradientBrush = new LinearGradientBrush(new Point(0,0), new Point (60, 20),
 _color1, _color2);
            g.FillRectangle(linearGradientBrush, new Rectangle(0, 0, this.Width, this.Height));

            linearGradientBrush.Dispose();
        }
}

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ansizak Messages postés 191 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 30 juin 2011
12 nov. 2008 à 11:35
Hum, merci à toi, je ne suis pas familier des methode de dérivation...
J'ai essayé ta méthode, et j'obtiens, une erreur "monProjet contient deja une définition pour paneltest"
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
12 nov. 2008 à 11:42
Ton erreur vient du fait que tu déclare 2 fois paneltest. Cherche où (ça n'est pas référencé dans le code que je t'ai donné)
Sinon, essaye d'ajouter la classe de mon message d'avant à ton projet.
Puis après sur ta form, ajoute un panel

MyGradientPanel pnl = new MyGradientPanel();
this.Controls.add(pnl);
pnl.Location = ...
pnl.Size = ..

Normalement tu devrais avoir le panel avec un dégradé :)
cs_ansizak Messages postés 191 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 30 juin 2011
12 nov. 2008 à 12:43
Hmm.. ok je vois.
Si je procède en créant ton panel MyGradientPanel auquel j'ajoute mon dégradé et qu'ensuite je fais ceci:
paneltest.BackColor = MyGradientPanel.BackColor
aurais-je le dégradé transposé sur mon panel ?
cs_ansizak Messages postés 191 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 30 juin 2011
12 nov. 2008 à 14:29
En attendant de meiux comprendre les méthodes override, j'ai essayé ceci:

LinearGradientBrush lgb = new LinearGradientBrush(panel6.ClientRectangle, Color.Black, Color.White, LinearGradientMode.Vertical);
                    panel6.CreateGraphics().FillRectangle(lgb, panel6.ClientRectangle);
                    panel6.Refresh();

Cela devrait en théorie fonctionner, or non...
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
12 nov. 2008 à 19:35
Alors voila ce que j'ai refais rien que pour toi parce que je le trouvai plus. Tu peux essayer ça sur un nouveau UserControl juste pour tester avant:

using

System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Linq;

using System.Text;

using System.Windows.Forms;

//A RAJOUTER:
using System.Drawing.Drawing2D;

namespace degraderRectangle
{

      public
partial
class
UserControl1 :
UserControl
      {

      private
Color couleurUn;

      private
Color couleurDeux;

      public UserControl1()
      {
            InitializeComponent();
      }[

Category(
"MesProprietes"),
Browsable(
true),
Description(
"Obtient ou d‚finit le d‚grad‚ du control.")]

public
Color CouleurUn
{

get {
return couleurUn; }

set
{
couleurUn =
value;

this.Refresh();
//On lance la proc‚dure OnPaint en rafraŒchissant.
}
}[

Category(
"MesProprietes"),
Browsable(
true),
Description(
"Obtient ou d‚finit le d‚grad‚ du control.")]

public
Color CouleurDeux
{

get {
return couleurDeux; }

set
{
couleurDeux =
value;

this.Refresh();
//On lance la proc‚dure OnPaint en rafraŒchissant.
}
}

protected
override
void OnPaint(
PaintEventArgs args)
{

Rectangle rect =
new
Rectangle(
new
Point(0,0),
this.Size);

LinearGradientBrush b =
new
LinearGradientBrush(
new
Point(0, 0),
new
Point(
this.Size.Width,
this.Size.Height), CouleurUn, CouleurDeux);
args.Graphics.FillRectangle(b, rect);
}
}
}
//J'ai mis un peu de temps à le refaire lol mais bon si ça peut t'aider...

La connaissance est la plus grande des richesses.
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
12 nov. 2008 à 19:37
ATTENTION: J'ai fait un copier coller de mon UserControl mais y'a comme qui dirait des bugs sur CSHARPFR donc regarde bien.

La connaissance est la plus grande des richesses.
Rejoignez-nous