Ваш текущий код рисует 4 прямоугольника одинакового размера (30, 30)
в немного другом месте (от (0, 1)
до (2, 2)
), так как вы просто используете индексаторы массива в качестве координат Locaton.
Простое решение, использующее значение Rectangle.Size
, которое вы сейчас показываете:
Увеличьте значения (X, Y)
Rectangle.Location
на смещение, определенное Rectagle Height
и Width
, умножив текущие (x, y) позиции в матрице на эти смещения:
(Обратите внимание, что индекс x
используется для умножения смещения высоты; конечно, для y
наоборот)
private int[,] matrix = new int[3, 3] {
{ 0, 1, 0 },
{ 0, 1, 0 },
{ 0, 1, 1 }
};
Size rectSize = new Size(30, 30);
private void panel2_Paint(object sender, PaintEventArgs e)
{
int xPosition = 0;
int yPosition = 0;
using (var brush = new SolidBrush(Color.Tomato)) {
for (var x = 0; x <= matrix.GetLength(0) - 1; x++)
for (var y = 0; y <= matrix.GetLength(1) - 1; y++)
{
xPosition = y * rectSize.Width;
yPosition = x * rectSize.Height;
if (matrix[x, y] != 0) {
var rect = new Rectangle(new Point(xPosition, yPosition), rectSize);
e.Graphics.FillRectangle(brush, rect);
}
}
}
}
![enter image description here](https://i.stack.imgur.com/V8wJ5.png)
С этой матрицей:
private int[,] matrix = new int[3, 3] {
{ 0, 1, 0 },
{ 0, 1, 0 },
{ 1, 1, 1 }
};
Вы получите это:
![enter image description here](https://i.stack.imgur.com/LDVIQ.png)