为什么此代码绘制一个框而不是L形?

时间:2019-04-21 14:28:23

标签: c# arrays winforms rectangles system.drawing

我似乎无法弄清楚这段代码有什么问题。

我正在尝试使用2D数组绘制RequestParams params = new RequestParams(); params.put("q", CityNme); params.put("appid", App_ID); params.put("units", "metric"); getjson(params); 形状。由于某种原因,该代码绘制的是一个大盒子,而不是L形状。我逐步执行了代码,并且L位置很好。
我不确定自己做错了什么。

(x, y)

1 个答案:

答案 0 :(得分:2)

您的当前代码将4个大小相同的矩形(30, 30)绘制在稍微不同的位置(从(0, 1)(2, 2)),因为您只是使用数组索引器作为本地坐标。

简单的解决方案,使用您现在显示的Rectangle.Size值:

(X, Y)的{​​{1}}值增加由Rectagle Rectangle.LocationHeight定义的偏移量,将矩阵中的当前(x,y)位置乘以这些偏移量:
(请注意,Width索引用于乘以高度偏移;当然,x则相反)

y

enter image description here

使用此矩阵:

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