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

scortex84 379 Messages postés mardi 19 mars 2002Date d'inscription 20 avril 2011 Dernière intervention - 17 août 2009 à 10:54 - Dernière réponse : scortex84 379 Messages postés mardi 19 mars 2002Date d'inscription 20 avril 2011 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Répondre au sujet
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 17 août 2009 à 17:44
+3
Utile
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 );
            }
        }
    }
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
Miltiades 233 Messages postés vendredi 21 mars 2003Date d'inscription 25 octobre 2010 Dernière intervention - 17 août 2009 à 12:08
0
Utile
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...
Commenter la réponse de Miltiades
scortex84 379 Messages postés mardi 19 mars 2002Date d'inscription 20 avril 2011 Dernière intervention - 17 août 2009 à 13:57
0
Utile
Merci pour ta réponse, malheureusement, j'ai déjà essayé et cela ne fonctionne pas.
Commenter la réponse de scortex84
scortex84 379 Messages postés mardi 19 mars 2002Date d'inscription 20 avril 2011 Dernière intervention - 17 août 2009 à 17:57
0
Utile
Super ça a l'air interessant, je vais essayer !

Merci pour ton aide.
Commenter la réponse de scortex84
scortex84 379 Messages postés mardi 19 mars 2002Date d'inscription 20 avril 2011 Dernière intervention - 18 août 2009 à 15:45
0
Utile
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 !
Commenter la réponse de scortex84
scortex84 379 Messages postés mardi 19 mars 2002Date d'inscription 20 avril 2011 Dernière intervention - 18 août 2009 à 17:50
0
Utile
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.
Commenter la réponse de scortex84

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.