我有一个WinForms项目,我试图在窗体的左上角(0,0)处绘制一个矩形。由于某种原因,它切除了矩形的高度和宽度的一个像素。这是代码:
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(Color.Red, 5), new Rectangle(0, 0, 50, 50));
}
这里是结果,为了清晰起见,将其炸毁:
我知道我可以通过在(1,1)处绘制矩形来纠正此问题,但是根据我从(0,0)和(1, 1)。例如,这是面板在(1,1)的样子,显然有一个像素的间隙:
所以我的问题是:为什么在(0,0)处绘制矩形不像在(0,0)处放置控件那样?为什么矩形的顶部和左侧被切掉一个像素?
答案 0 :(得分:2)
Pen
的{{3}}属性的默认值为PenAlignment.Center
,这意味着绘制的线将居中于该线。所以您所看到的是预期的。
您可能希望将Alignment
设置为PenAlignment.Inset
:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawRectangle(
new Pen(Color.Red, 5) { Alignment = PenAlignment.Inset },
new Rectangle(0, 0, 50, 50));
}
您可能还需要阅读Alignment
备注:
Center
是此属性的默认值,并指定 笔的宽度以曲线或多边形的轮廓为中心。一种 此属性的Inset
值指定笔的宽度 在曲线或多边形的轮廓内。其他三个值Right
,Left
和Outset
将使笔居中。