ToolStrip et couleur au survol de la souris [Résolu]

Signaler
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
-
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
-
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

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
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 );
            }
        }
    }
}
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

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...
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
Merci pour ta réponse, malheureusement, j'ai déjà essayé et cela ne fonctionne pas.
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
Super ça a l'air interessant, je vais essayer !

Merci pour ton aide.
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
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 !
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
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.