undsoft
undsoft

Reputation: 818

Border in DrawRectangle

Well, I'm coding the OnPaint event for my own control and it is very nescessary for me to make it pixel-accurate.

I've got a little problem with borders of rectangles.

See picture:

removed dead ImageShack link

These two rectangles were drawn with the same location and size parameters, but using different size of the pen. See what happend? When border became larger it has eaten the free space before the rectangle (on the left).

I wonder if there is some kind of property which makes border be drawn inside of the rectangle, so that the distance to rectangle will always be the same. Thanks.

Upvotes: 35

Views: 56915

Answers (4)

hultqvist
hultqvist

Reputation: 18429

You can do this by specifying PenAlignment

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

Upvotes: 70

Fredrik M&#246;rk
Fredrik M&#246;rk

Reputation: 158309

If you want the outer bounds of the rectangle to be constrained in all directions you will need to recalculate it in relation to the pen width:

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

Upvotes: 10

Noldorin
Noldorin

Reputation: 147280

This isn't a direct answer to the question, but you might want to consider using the ControlPaint.DrawBorder method. You can specify the border style, colour, and various other properties. I also believe it handles adjusting the margins for you.

Upvotes: 2

Scoregraphic
Scoregraphic

Reputation: 7200

I guess not... but you may move the drawing position half the pen size to the bottom right

Upvotes: 0

Related Questions