2017-04-17 4 views
1

Controlを継承し、破線の枠線を描くはずのBorderControlというクラスを作成しました。ここでHatchBrushは、左上のダッシュだけを描画します。

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 

これと実際の方法の唯一の違いは、ブール値かどうかを決定するということです破線の枠線または実線の枠線を描画します。

アイデア?

EDIT あなたは明白なことを指摘する前に、実際の方法はまた、トップとボトムラインのHatchStyle.DashedHorizo​​ntalを使用していますので、それは問題ではありません。

+0

私は 'HatchStyle.DarkDownwardDiagonel'か、おそらく' LargeCheckerBoard'を使ってみます。パターンからのアーチファクトが正しく整列しない可能性を完全に排除するはずです。それらのブラシが固定されている方法で、私はあなたが使用しているハッチのパターンの間隔のギャップでピックアップしていると思います。私はあなたがゆっくり長方形の幅と高さを調整すると、正確に描画するサイズを見つけることができるだろうと賭けています。 –

+0

@BradleyUffner LargeCheckerBoard/SmallCheckerBoardがやった。これを回答として投稿すると、私はそれを受け入れます。ありがとう! – Audiopolis

答えて

2

HatchStyle.DashedVerticalenter image description hereピクセルが4単位ごとにあるようです。このような塗りつぶしは、描画されたウィンドウの左上に固定されます(線が開始された位置ではありません)。つまり、4で割り切れないピクセル上にある線を描画しようとすると、背景色だけを取得します。

必要なものは、どのようにスライスしても破線で表示されるすべての列と行にフォアグラウンドピクセルがある塗りつぶしです。私はHatchStyle.LargeCheckerBoardenter image description hereをお勧めします。他のパターンがうまくいくかもしれませんが、あなたの例に最も近い出力を生成するように思えます。

HatchStyleのすべてのメンバーがどのように見えるかを示す画像です。 enter image description here

関連する問題