首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DrawRectangle边界

DrawRectangle边界
EN

Stack Overflow用户
提问于 2009-05-29 11:17:13
回答 4查看 51.9K关注 0票数 33

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

矩形的边框有点问题。

见图:

删除死ImageShack链路

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

我想知道是否有某种属性使得边框被绘制在矩形内,这样到矩形的距离就总是一样的。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-27 10:51:59

您可以通过指定PenAlignment来做到这一点。

代码语言:javascript
运行
复制
Pen pen = new Pen(Color.Black, 2);
pen.Alignment = PenAlignment.Inset; //<-- this
g.DrawRectangle(pen, rect);
票数 67
EN

Stack Overflow用户

发布于 2009-05-29 11:39:16

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

代码语言:javascript
运行
复制
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
    }
}
票数 9
EN

Stack Overflow用户

发布于 2009-05-29 11:26:13

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/925509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档