J'essaie de créer un bouton transparent en C# (.NET 3.5 SP1) à utiliser dans mon application WinForms. J'ai tout essayé pour que le bouton soit transparent (il devrait montrer l'arrière-plan dégradé sous le bouton) mais ça ne marche pas.Dessin d'un bouton transparent
Voici le code que je utilise:
public class ImageButton : ButtonBase, IButtonControl
{
public ImageButton()
{
this.SetStyle(
ControlStyles.SupportsTransparentBackColor |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.UserPaint, true);
this.BackColor = Color.Transparent;
}
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
g.FillRectangle(Brushes.Transparent, this.ClientRectangle);
g.DrawRectangle(Pens.Black, this.ClientRectangle);
}
// rest of class here...
}
Le problème est que le bouton semble saisir la mémoire de l'interface utilisateur au hasard de quelque part et se remplissant une mémoire tampon de l'interface utilisateur de Visual Studio (en mode de conception). Au moment de l'exécution, il saisit un tampon zéro et est complètement noir.
Mon but ultime est de peindre une image sur un bouton invisible au lieu du rectangle. Le concept devrait rester le même cependant. Lorsque l'utilisateur survole le bouton, une forme de type bouton est dessinée.
Des idées?
EDIT: Merci tout le monde, ce qui suit a fonctionné pour moi:
public class ImageButton : Control, IButtonControl
{
public ImageButton()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
SetStyle(ControlStyles.ResizeRedraw, true);
this.BackColor = Color.Transparent;
}
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
g.DrawRectangle(Pens.Black, this.ClientRectangle);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// don't call the base class
//base.OnPaintBackground(pevent);
}
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT;
return cp;
}
}
// rest of class here...
}
semble être un double de: http://stackoverflow.com/questions/201778/can-i-create-transparent-buttons-in-visual -studio-2005-with-c – Aamir
Ce qui a été suggéré dans ce fil n'a pas fonctionné pour moi. – rein
essayez de peindre avec une nouvelle couleur avec une valeur d'opacité 0 au lieu de Color.Transparent – TheVillageIdiot