J'ai créé un bouton personnalisé (un CloseButton) qui ressemble à ceci :
Lorsque je passe ma souris sur le bouton, la couleur devient rouge, comme ceci :
Je veux redessiner le "X" sur le bouton en blanc lorsque la souris est au-dessus du bouton, pour qu'il ressemble à quelque chose comme ceci (j'ai modifié l'image ci-dessus dans Paint pour montrer comment je veux que cela ressemble) :
Je ne sais pas comment m'y prendre.
Mon bouton personnalisé hérite essentiellement du contrôle Button ordinaire, avec quelques paramètres personnalisés. Le code est le suivant :
public class CloseButton : Button
{
public CloseButton()
{
this.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.FlatAppearance.BorderSize = 0;
this.FlatAppearance.MouseDownBackColor = System.Drawing.Color.IndianRed;
this.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkRed;
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.Size = new System.Drawing.Size(50, 30);
this.UseVisualStyleBackColor = true;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
GraphicsPath gPath;
Pen gPen;
gPen = new Pen(System.Drawing.SystemColors.ControlText);
gPath = new GraphicsPath();
gPath.AddLine(20, 10, 30, 20);
gPath.CloseFigure();
gPath.AddLine(20, 20, 30, 10);
gPath.CloseFigure();
e.Graphics.DrawPath(gPen, gPath);
}
}
J'ai essayé de modifier la méthode OnPaint() pour que la couleur du stylo soit déterminée par la couleur de fond du contrôle, comme suit :
if ((this.BackColor.Equals(System.Drawing.Color.DarkRed) || this.BackColor.Equals(System.Drawing.Color.IndianRed))
{
gPen = new Pen(System.Drawing.SystemColors.ControlLightLight;
}
else
{
gPen = new Pen(System.Drawing.SystemColors.ControlText;
}
Ensuite, dans mes gestionnaires MouseEnter et Click, j'invalide et rafraîchis le contrôle comme suit :
_BtnClose.Invalidate();
_BtnClose.Refresh();
Cela ne fait rien du tout. Comment puis-je réaliser ce que j'essaie de faire ? Si je suis coincé, je peux toujours créer un autre bouton personnalisé avec un X blanc dessiné dessus, et afficher/masquer ce bouton selon les besoins, mais j'aimerais éviter de le faire si possible.