Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否根据方框大小勾选复选框? 介绍_.net_Vb.net_Winforms_User Controls_Gdi+ - Fatal编程技术网

.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)
        }