วาดช่องทำเครื่องหมายตามขนาดกล่องหรือไม่

การแนะนำ

ฉันกำลังเขียนกล่องกาเครื่องหมายควบคุมผู้ใช้อย่างง่ายที่จะวาดพื้นหลังและทำเครื่องหมายด้วยสีที่กำหนดเอง

ในการวาดเห็บ ฉันทำสิ่งนี้:

    ''' <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 เพื่อแก้ไขขนาดขีดสำหรับขนาดกล่องอื่น ๆ ได้อย่างไร


person ElektroStudios    schedule 04.05.2015    source แหล่งที่มา


คำตอบ (1)


คุณต้องมีปัจจัยมาตราส่วนเพื่อกำหนดว่าจะเพิ่มพิกัด "x" และ "y" แต่ละรายการได้มากน้อยเพียงใด นี่คือตัวอย่าง (สมมติว่าความกว้างของช่องทำเครื่องหมายเริ่มต้นคือ 12 พิกเซล ซึ่งเป็นเพียงการคาดเดา):

    Dim scaleFactor As Single = CType(rect.Width, Single) / 12.0
    Dim points As PointF() =
        New PointF() {
            New PointF(rect.X + scaleFactor * 3, rect.Y + scaleFactor * 5),
            New PointF(rect.X + scaleFactor * 5, rect.Y + scaleFactor * 7),
            New PointF(rect.X + scaleFactor * 9, rect.Y + scaleFactor * 3),
            New PointF(rect.X + scaleFactor * 9, rect.Y + scaleFactor * 4),
            New PointF(rect.X + scaleFactor * 5, rect.Y + scaleFactor * 8),
            New PointF(rect.X + scaleFactor * 3, rect.Y + scaleFactor * 6),
            New PointF(rect.X + scaleFactor * 3, rect.Y + scaleFactor * 7),
            New PointF(rect.X + scaleFactor * 5, rect.Y + scaleFactor * 9),
            New PointF(rect.X + scaleFactor * 9, rect.Y + scaleFactor * 5)
        }
person Rajeev Goel    schedule 04.05.2015