【发布时间】:2015-07-13 07:07:18
【问题描述】:
简介
我正在编写一个简单的复选框用户控件,它将以自定义颜色绘制背景和刻度。
要画勾号,我这样做:
''' <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
这是结果:
问题
问题是tick的大小/点是根据默认复选框大小指定的,我从这篇文章中得到了主要思想:
True Transparency support for the .NET CheckBox control
所以,假设我增加了复选框的框(上面代码的rect var 的宽度和高度)然后它会画一个像这样的小勾:
问题
如何动态修改我在 DrawTick 方法中使用 Points 执行的算术以修复其他框大小的刻度大小?
【问题讨论】:
标签: .net vb.net winforms user-controls gdi+