You can override Paint event
A basic sample, to be improved :
Public Class MyColoredRadioButton
Inherits RadioButton
Private m_CheckedColor As Color
Private m_UncheckedColor As Color
Public Sub New()
m_CheckedColor = Color.Blue
m_UncheckedColor = Color.White
End Sub
Public Property CheckedColor() As Color
Get
Return m_CheckedColor
End Get
Set(value As Color)
m_CheckedColor = value
End Set
End Property
Public Property UncheckedColor() As Color
Get
Return m_UncheckedColor
End Get
Set(value As Color)
m_UncheckedColor = value
End Set
End Property
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
Dim rectRadio As New RectangleF(0, (ClientRectangle.Height - 13) / 2 - 1, 13, 13)
e.Graphics.DrawEllipse(Pens.Black, rectRadio)
'rectRadio.Offset(New Point(1, 1))
rectRadio.Inflate(New Size(-3, -3))
If Me.Checked Then
e.Graphics.FillEllipse(New SolidBrush(CheckedColor), rectRadio)
Else
e.Graphics.FillEllipse(New SolidBrush(UncheckedColor), rectRadio)
End If
End Sub
End Class
To initialize colors for the 2 first Radio Buttons in the test :
MyColoredRadioButton1.CheckedColor = Color.Red
MyColoredRadioButton1.UncheckedColor = Color.Green
MyColoredRadioButton2.CheckedColor = Color.Purple
MyColoredRadioButton2.UncheckedColor = Color.Orange