การแนะนำ
ฉันกำลังเขียนกล่องกาเครื่องหมายควบคุมผู้ใช้อย่างง่ายที่จะวาดพื้นหลังและทำเครื่องหมายด้วยสีที่กำหนดเอง
ในการวาดเห็บ ฉันทำสิ่งนี้:
''' <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
นี่คือผลลัพธ์:
ปัญหา
ปัญหาคือขนาด/จุดของเครื่องหมายถูกระบุตามขนาดช่องทำเครื่องหมายเริ่มต้น ฉันได้รับแนวคิดหลักจากบทความนี้:
การสนับสนุนความโปร่งใสที่แท้จริงสำหรับ การควบคุมช่องทำเครื่องหมาย .NET
สมมติว่าฉันเพิ่มช่องของช่องทำเครื่องหมาย (ความกว้างและความสูงของ rect
var ของโค้ดด้านบน) จากนั้นมันจะวาดเครื่องหมายเล็ก ๆ เช่นนี้:
คำถาม
ฉันจะปรับเปลี่ยนเลขคณิตแบบไดนามิกที่ฉันทำกับ Points ในวิธี DrawTick
เพื่อแก้ไขขนาดขีดสำหรับขนาดกล่องอื่น ๆ ได้อย่างไร