Graphics.FillRectangle()的意外结果

时间:2014-02-27 09:09:58

标签: c# winforms graphics

我正在尝试制作一个小的15x15播放网格,并排绘制实心轮廓矩形工作正常,但是当我尝试调用FillRectangle()来填充上述单元格时,结果是......不是我所期待的......如果我只是告诉你,我认为这更容易..

filled grid

这是代码

//Draw grid now since InitGrid() is done
using (Graphics formGraphics = this.CreateGraphics())
{
            Pen pen = new Pen(Color.Black);
            SolidBrush brush = new SolidBrush(Color.Beige);

            int y = new int();
            List<Rectangle> rect = new List<Rectangle>();

            foreach (Cell cell in pGrid.cells)
            {
                rect.Add(new Rectangle(cell.Point.X, cell.Point.Y, 18, 18));
                formGraphics.DrawRectangle(pen, rect[y]);
                formGraphics.FillRectangle(brush, rect[y++]);
            }
        }

另外一个问题是,由于我使用的是using代码块,我仍然需要在Dispose()Pen上致电Graphics吗?

1 个答案:

答案 0 :(得分:2)

“覆盖区域”的差异是由DrawRectangle使用厚度为1px的Pen引起的,其中0.5px被添加到矩形的外边缘,然后圆形“向右下方”。然后,下一个单元格的FillRectangle覆盖这些右下边框。

您可以使用2的边框粗细,这将导致边框比填充区域大2个像素,因此每边厚度为1px。

Pen pen = new Pen(Color.Black, 2);

这仅适用于单元格之间存在实际空间以显示边框的情况。如果没有空间用于边框,则必须缩小单元格大小或增大网格本身。

另一个解决方案(因为你提到大纲很好)是首先调用FillRectangle然后调用DrawRectangle

笔和笔周围的using也不会受伤。请注意,您还可以使用静态Pens.Black(除非您要使用2px粗边框的解法)和Brushes.Beige