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 41
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
Rejoignez-nous