Ничего особенного не требуется, ваш пользовательский код будет использован, как только кнопка получит свое первое уведомление о рисовании. Возможная ошибка - расположение вызова base.OnPaint (). Это не будет работать, например:
protected override void OnPaint(PaintEventArgs e) {
// Wrong order:
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(3, 3, Width - 7, Height - 7));
base.OnPaint(e);
}
Метод base.OnPaint () рисует внешний вид кнопки по умолчанию, стирая настройки. Вы должны вызвать base.OnPaint () до рисования ваших вещей:
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(3, 3, Width - 7, Height - 7));
}