ToolStrip et couleur au survol de la souris

Résolu
scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
- 17 août 2009 à 10:54
scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
- 18 août 2009 à 17:50
Bonjour,

Je me bagare depuis ce matin avec ma ToolStrip (C# 2.0 / VS 2005).

En héritant de la classe "ProfessionalColorTable", j'ai réussi à personnaliser ma barre d'outils pour la rendre plus "sexy".

Par contre je n'ai pas réussi à modifier la couleur du bouton lorsqu'il est survolé par la souris.

La doc MSDN dit que c'est la propriété "GripDark / GripLight", mais cela ne fonctionne pas.

Avez-vous une idée de comment je peux faire ?

Merci d'avance pour votre aide.

Seb.

6 réponses

Lutinore
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Membre
Dernière intervention
27 octobre 2012
42
17 août 2009 à 17:44
Salut, pour gèrer au mieux le dessin des ToolStrip, il faut mieux dériver son propre renderer :

public partial class Form1 : Form
{
    public Form1( )
    {
        InitializeComponent( );

        ToolStripManager.Renderer = new MyToolStripRenderer( );
        Bitmap icon = this.Icon.ToBitmap( );


        ToolStrip ts = new ToolStrip( );
        ts.Parent = this;
        ts.GripStyle = ToolStripGripStyle.Hidden;
        ts.Items.AddRange
        (
            new ToolStripItem[ ]
            {
                new ToolStripButton( icon ),
                new ToolStripButton( icon ),
                new ToolStripButton( icon ),
                new ToolStripButton( icon )
            }
        );
    }

    private sealed class MyToolStripRenderer : ToolStripProfessionalRenderer
    {
        private Brush magentaBrush =
            new SolidBrush( Color.FromArgb( 50, Color.Magenta ) );


        protected override void OnRenderButtonBackground( ToolStripItemRenderEventArgs e )
        {
            //base.OnRenderButtonBackground( e );

            if ( e.Item.Selected )
            {
                e.Graphics.FillRectangle( magentaBrush, 0, 0, e.Item.Width - 1, e.Item.Height - 1 );
                e.Graphics.DrawRectangle( Pens.Magenta, 0, 0, e.Item.Width - 1, e.Item.Height - 1 );
            }
        }
    }
}
3
Miltiades
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

17 août 2009 à 12:08
tu peux essayer d'utiliser l'évènement onMousseOver...
tu modifie la couleur dans cette évènement
et tu retablie la couleur dans l'evenement correspondant
(qui doit être onMouseLeave je crois...)


Nul ne devient grand par la guerre...
0
scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
17 août 2009 à 13:57
Merci pour ta réponse, malheureusement, j'ai déjà essayé et cela ne fonctionne pas.
0
scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
17 août 2009 à 17:57
Super ça a l'air interessant, je vais essayer !

Merci pour ton aide.
0

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

Posez votre question
scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
18 août 2009 à 15:45
Lutinore,

sans vouloir abuser de ta gentillesse, sais-tu comment tu peux définir ta propre ProfessionalColorTable dans ta classe "MyToolStripRenderer" ?

J'ai fais ça, mais cela ne fonctionne pas :

this.ColorTable = new CustomToolStripColorTable();

Une idée ?

Merci !
0
scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
18 août 2009 à 17:50
Bah en fait j'ai trouvé entre temps ! Il faut juste utiliser le constructeur de la classe héritée !

Merci encore pour ton aide.
0