.net 是否根据方框大小勾选复选框? 介绍
我正在编写一个简单的复选框用户控件,它将以自定义颜色绘制背景和勾号 要画勾号,请执行以下操作:.net 是否根据方框大小勾选复选框? 介绍,.net,vb.net,winforms,user-controls,gdi+,.net,Vb.net,Winforms,User Controls,Gdi+,我正在编写一个简单的复选框用户控件,它将以自定义颜色绘制背景和勾号 要画勾号,请执行以下操作: ''' <summary> ''' Draws the checkbox tick. ''' </summary> ''' <param name="g">The drawing surface.</param> ''' <param name="rect">The box rectangle.<
''' <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
“”
''勾选复选框。
'''
''图纸表面。
“长方体”。
''复选框状态。
专用子图纸(ByVal g作为图形,
ByVal rect作为矩形,
ByVal checkState(作为checkState)
选择案例检查状态
案例检查状态。已检查
将点变暗为点F()=
新点f(){
新的点F(矩形X+3,矩形Y+5),
新的点F(矩形X+5,矩形Y+7),
新的点F(矩形X+9,矩形Y+3),
新的点F(矩形X+9,矩形Y+4),
新的点F(矩形X+5,矩形Y+8),
新的点F(矩形X+3,矩形Y+6),
新的点F(矩形X+3,矩形Y+7),
新的点F(矩形X+5,矩形Y+9),
新点F(矩形X+9,矩形Y+5)
}
将支票笔用作新笔(Me.TickColor,1)
g、 抽绳(支票笔、点)
终端使用
案例检查状态。不确定
将checkBrush用作新的SolidBrush(Me.TickColor)
g、 FillRectangle(选中笔刷,新矩形(rect.X+3,
矩形Y+3,
矩形宽度-5,
直线高度-5)
终端使用
案例检查状态。未检查
“什么也不做。
结束选择
端接头
结果是:
问题 问题是勾号的大小/点数是根据默认的复选框大小指定的,我从本文中得到了主要想法: 因此,假设我增加复选框的框(上面代码的
rect
var的宽度和高度),那么它将画一个小记号,如下所示:
问题:
如何动态修改我对
DrawTick
方法中的点所做的运算,以固定其他框大小的记号大小?您需要一个比例因子来确定每个“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)
}