Рисование прозрачной кнопки

Я пытаюсь создать прозрачную кнопку в C # (.NET 3.5 SP1) для использования в моем приложении WinForms. Я перепробовал все, чтобы кнопка была прозрачной (она должна показывать градиентный фон под кнопкой), но она просто не работает.

Вот код, который я использую:

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...

}

Проблема в том, что кнопка, кажется, захватывает произвольную память пользовательского интерфейса откуда-то и заполняет себя некоторым буфером из пользовательского интерфейса Visual Studio (в режиме разработки). Во время выполнения он захватывает некоторый нулевой буфер и полностью черный.

Моя главная цель - нарисовать изображение на невидимой кнопке вместо прямоугольника. Однако концепция должна оставаться прежней. Когда пользователь наводит курсор на кнопку, то рисуется форма типа кнопки.

Любые идеи

EDIT: Спасибо всем, у меня сработало следующее:

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...
}

Ответы на вопрос(4)

Ваш ответ на вопрос