【问题标题】:Draw checkbox tick according to the box size?根据框大小绘制复选框?
【发布时间】: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+


    【解决方案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)
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 2014-08-31
      • 2015-04-26
      • 1970-01-01
      • 2014-05-13
      • 2011-07-26
      相关资源
      最近更新 更多