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.
0
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.
0
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
0
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();
        }
}
0

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"
0
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é :)
0
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 ?
0
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...
0
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.
0
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.
0
Rejoignez-nous