Perkenalan
Saya sedang menulis kontrol pengguna kotak centang sederhana yang akan menggambar latar belakang dan tanda centang dalam warna khusus.
Untuk menggambar tanda centang, saya melakukan ini:
''' <summary>
''' Draws the checkbox tick.
''' </summary>
''' <param name="g">The drawing surface.</param>
''' <param name="rect">The box rectangle.</param>
''' <param name="checkState">The checkbox state.</param>
Private Sub DrawTick(ByVal g As Graphics,
ByVal rect As Rectangle,
ByVal checkState As CheckState)
Select Case checkState
Case checkState.Checked
Dim points As PointF() =
New PointF() {
New PointF(rect.X + 3, rect.Y + 5),
New PointF(rect.X + 5, rect.Y + 7),
New PointF(rect.X + 9, rect.Y + 3),
New PointF(rect.X + 9, rect.Y + 4),
New PointF(rect.X + 5, rect.Y + 8),
New PointF(rect.X + 3, rect.Y + 6),
New PointF(rect.X + 3, rect.Y + 7),
New PointF(rect.X + 5, rect.Y + 9),
New PointF(rect.X + 9, rect.Y + 5)
}
Using checkPen As New Pen(Me.TickColor, 1)
g.DrawLines(checkPen, points)
End Using
Case checkState.Indeterminate
Using checkBrush As New SolidBrush(Me.TickColor)
g.FillRectangle(checkBrush, New Rectangle(rect.X + 3,
rect.Y + 3,
rect.Width - 5,
rect.Height - 5))
End Using
Case checkState.Unchecked
' Do Nothing.
End Select
End Sub
Inilah hasilnya:
Masalah
Soalnya ukuran/titik centangnya ditentukan sesuai ukuran default checkbox, ide pokoknya saya dapatkan dari artikel ini:
Dukungan Transparansi Sejati untuk Kontrol Kotak Centang .NET
Jadi, misalkan saya menambah kotak pada kotak centang (lebar dan tinggi rect
var kode di atas) maka akan muncul tanda centang kecil seperti ini:
Pertanyaan
Bagaimana saya dapat secara dinamis mengubah aritmatika yang saya lakukan dengan metode Poin dalam DrawTick
untuk memperbaiki ukuran centang untuk ukuran kotak lainnya?