我似乎无法弄清楚这段代码有什么问题。
我正在尝试使用2D数组绘制RequestParams params = new RequestParams();
params.put("q", CityNme);
params.put("appid", App_ID);
params.put("units", "metric");
getjson(params);
形状。由于某种原因,该代码绘制的是一个大盒子,而不是L
形状。我逐步执行了代码,并且L
位置很好。
我不确定自己做错了什么。
(x, y)
答案 0 :(得分:2)
您的当前代码将4个大小相同的矩形(30, 30)
绘制在稍微不同的位置(从(0, 1)
到(2, 2)
),因为您只是使用数组索引器作为本地坐标。
简单的解决方案,使用您现在显示的Rectangle.Size
值:
将(X, Y)
的{{1}}值增加由Rectagle Rectangle.Location
和Height
定义的偏移量,将矩阵中的当前(x,y)位置乘以这些偏移量:
(请注意,Width
索引用于乘以高度偏移;当然,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);
}
}
}
}
您得到了: