Próbuję utworzyć przezroczysty przycisk w języku C# (.NET 3.5 SP1) do użycia w mojej aplikacji WinForm. Próbowałem wszystkiego, aby przycisk był przezroczysty (powinien pokazać gradient pod przyciskiem), ale po prostu nie działa.Rysowanie przezroczystego przycisku
Oto kod używam:
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...
}
Problem polega na tym, że przycisk wydaje się chwytając losowego pamięci UI z gdzieś i napełniania się z pewnym buforem z Visual Studio UI (w trybie projektowania). W czasie wykonywania chwyta bufor zerowy i jest całkowicie czarny.
Moim ostatecznym celem jest namalowanie obrazu na niewidocznym przycisku zamiast prostokąta. Koncepcja powinna pozostać taka sama. Kiedy użytkownik unosi się nad przyciskiem, rysowany jest kształt przycisku.
Wszelkie pomysły?
EDIT: Dzięki everybody, następujące pracował dla mnie:
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...
}
spojrzenia być duplikat: http://stackoverflow.com/questions/201778/can-i-create-transparent-buttons-in-visual -studio-2005-with-c – Aamir
Co zostało zasugerowane w tym wątku, nie działa dla mnie. – rein
spróbuj malować z nowym kolorem z wartością 0 nieprzezroczystości zamiast Koloru. Przezroczysty – TheVillageIdiot