HatchBrush仅在左侧和顶侧绘制破折号

时间:2017-04-17 12:47:52

标签: .net vb.net

我创建了一个名为BorderControl的类,它继承了Control,并且应该绘制虚线边框。在进一步讨论之前,结果如下:

enter image description here

这是简化的OnPaint方法:

    Protected Overrides Sub OnPaint(e As PaintEventArgs)
    MyBase.OnPaint(e)
    Dim Height As Integer = ClientSize.Height
    Dim Width As Integer = ClientSize.Width
    With e.Graphics
        Using HB As New HatchBrush(HatchStyle.DashedVertical, Color.Green, Color.Red)
            Using P As New Pen(HB)
                .DrawLine(P, Point.Empty, New Point(0, Height - 1))
                .DrawLine(P, Point.Empty, New Point(Width - 1, 0))
                .DrawLine(P, New Point(Width - 1, 0), New Point(Width - 1, Height - 1))
                .DrawLine(P, New Point(0, Height - 1), New Point(Width - 1, Height - 1))
            End Using
        End Using
    End With
End Sub

此方法与实际方法的唯一区别在于布尔值决定是绘制虚线边框还是实心边框。

有什么想法吗?

修改 在你指出显而易见的事实之前,实际的方法也使用HatchStyle.DashedHorizo​​ntal作为顶行和底行,所以这不是问题。

1 个答案:

答案 0 :(得分:2)

HatchStyle.DashedVertical enter image description here看起来每4个单位只有像素。像这样的填充锚定在它们被绘制的窗口的左上角(而不是从线开始的位置),这意味着如果你试图绘制一个像素上的线不能被4整除,你将会只获得背景颜色。

你需要的是一个填充物,它在所有列和行中都有前景像素,无论你如何"切片"它。我建议使用HatchStyle.LargeCheckerBoard enter image description here,因为它看起来会产生与您的示例最匹配的输出,但其他模式可能有效。

以下图片展示了HatchStyle每个成员的预览。enter image description here