DrawRectangle中的边框

好吧,我正在为我自己的控件编写OnPaint事件的编码,这对我来说是非常必要的,以使其像素精确。

我对矩形边框有一点问题。

见图:

删除了死的ImageShack链接

使用相同的位置和大小参数绘制这两个矩形,但使用不同大小的笔。 看看发生了什么? 当边界变大时,它会占据矩形之前的自由空间(左侧)。

我想知道是否有某种属性使得边框被绘制在矩形内部,因此到矩形的距离将始终相同。 谢谢。

您可以通过指定PenAlignment来完成此操作

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

如果希望矩形的外边界在所有方向上受到约束,则需要根据笔宽度重新计算它:

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

这不是问题的直接答案,但您可能需要考虑使用ControlPaint.DrawBorder方法。 您可以指定边框样式,颜色和各种其他属性。 我也相信它会为你调整边距。

我猜不是……但你可以将画笔位置的一半移到笔右下方