.net - opcion - Dibujar la casilla de verificación de acuerdo con el tamaño de la casilla?
php casillas de verificacion (1)
Necesita un factor de escala para determinar cuánto aumentar cada coordenada "x" e "y". Aquí hay un ejemplo (suponiendo que el ancho de la casilla de verificación predeterminada es de 12 píxeles, que es solo una suposición):
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)
}
Introducción
Estoy escribiendo un simple control de usuario de casilla de verificación que dibujará un fondo y un tic en un color personalizado.
Para dibujar el tic, hago esto:
'''''' <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
Este es el resultado:
Problema
El problema es que el tamaño / puntos de la marca se especifican de acuerdo con el tamaño de casilla de verificación predeterminado, obtengo la idea principal de este artículo:
Compatibilidad True Transparency para el control .NET CheckBox
Entonces, digamos que aumente la casilla de la casilla de verificación (el ancho y alto de la rect
var del código anterior) y dibujará un pequeño tic como este:
Pregunta
¿Cómo podría modificar dinámicamente la aritmética que hago con los puntos en el método DrawTick
para fijar el tamaño de tilde para otros tamaños de DrawTick
?