使用图形在WinForms控件的左上角绘制矩形会切断矩形顶部和左侧的一个像素

时间:2019-07-08 15:30:12

标签: c# .net winforms drawing gdi+

我有一个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));
}

这里是结果,为了清晰起见,将其炸毁:

enter image description here

我知道我可以通过在(1,1)处绘制矩形来纠正此问题,但是根据我从(0,0)和(1, 1)。例如,这是面板在(1,1)的样子,显然有一个像素的间隙:

enter image description here

所以我的问题是:为什么在(0,0)处绘制矩形不像在(0,0)处放置控件那样?为什么矩形的顶部和左侧被切掉一个像素?

1 个答案:

答案 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值指定笔的宽度   在曲线或多边形的轮廓内。其他三个值   RightLeftOutset将使笔居中。