web-dev-qa-db-ja.com

DrawRectangleの境界線

ええと、私は自分のコントロールのためにOnPaintイベントをコーディングしています。ピクセル精度にするために私は非常に必要です。

長方形の境界線に少し問題があります。

画像を参照してください:

削除されたImageShackリンクを削除

これらの2つの長方形は、同じ場所とサイズのパラメーターで描画されましたが、ペンのサイズが異なります。何が起こったの?境界線が大きくなると、長方形の前(左側)の空きスペースがなくなります。

四角形の内側に境界線を描くようなプロパティがあるので、四角形までの距離は常に同じになるのでしょうか。ありがとう。

27
undsoft

PenAlignment を指定してこれを行うことができます

Pen pen = new Pen(Color.Black, 2);
pen.Alignment = PenAlignment.Inset; //<-- this
g.DrawRectangle(pen, rect);
52
hultqvist

四角形の外側の境界をすべての方向に拘束する場合は、ペンの幅に関連して再計算する必要があります。

private void DrawRectangle(Graphics g, Rectangle rect, float penWidth)
{
    using (Pen pen = new Pen(SystemColors.ControlDark, penWidth))
    {
        float shrinkAmount = pen.Width / 2;
        g.DrawRectangle(
            pen,
            rect.X + shrinkAmount,   // move half a pen-width to the right
            rect.Y + shrinkAmount,   // move half a pen-width to the down
            rect.Width - penWidth,   // shrink width with one pen-width
            rect.Height - penWidth); // shrink height with one pen-width
    }
}
6
Fredrik Mörk

これは質問への直接の回答ではありませんが、 ControlPaint.DrawBorder メソッド。境界線のスタイル、色、その他のさまざまなプロパティを指定できます。私も信じていますマージンの調整を処理します。

1
Noldorin

私はそうは思いません...しかし、描画位置をペンサイズの半分を右下に移動することができます

0
Scoregraphic