我正在尝试制作一个小的15x15播放网格,并排绘制实心轮廓矩形工作正常,但是当我尝试调用FillRectangle()来填充上述单元格时,结果是......不是我所期待的......如果我只是告诉你,我认为这更容易..
这是代码
//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
吗?
答案 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
。