C#面板-图纸发布

C#面板-图纸发布,c#,winforms,2d,drawing,C#,Winforms,2d,Drawing,我正在为我的下一个游戏编写我自己的游戏编辑器,虽然我在使用TileMap Creator时遇到了一些小问题,但我已经制作了一个面板,并开始根据地图的宽度和高度绘制32x32的小矩形,到目前为止都很好,但是如果我尝试增加地图的大小,比如说300x300,窗口上什么也没有显示,我必须全屏调整窗口的大小才能看到矩形 我已经发布了一张描述问题和代码的图片。 有人知道为什么会这样吗 代码: private List<Rectangle> Rectangles = new List<Re

我正在为我的下一个游戏编写我自己的游戏编辑器,虽然我在使用TileMap Creator时遇到了一些小问题,但我已经制作了一个面板,并开始根据地图的宽度和高度绘制32x32的小矩形,到目前为止都很好,但是如果我尝试增加地图的大小,比如说300x300,窗口上什么也没有显示,我必须全屏调整窗口的大小才能看到矩形

我已经发布了一张描述问题和代码的图片。 有人知道为什么会这样吗

代码:

private List<Rectangle> Rectangles = new List<Rectangle>();
private Graphics g;

private void mapArea_Paint(object sender, PaintEventArgs e)
{
    g = e.Graphics;

    if (Rectangles.Count != 0)
        g.DrawRectangles(Pens.LightGray, Rectangles.ToArray());
}
private void GameEditor_SizeChanged(object sender, EventArgs e)
{
    mapArea.Size = new Size(this.Size.Width, this.Size.Height);

}
private void mapTab_newMap_createMap_Click(object sender, EventArgs e)
{
    for (int i = 0; i < Convert.ToInt32(mapTab_mapWidth.TextBoxText); i++)
    {
        for (int j = 0; j < Convert.ToInt32(mapTab_mapHeight.TextBoxText); j++)
        {
            Rectangle rect = new Rectangle(new Point(i * 32, j * 32), new Size(32, 32));
            Rectangles.Add(rect);
        }
    }
}
私有列表矩形=新列表();
私有图形g;
私有void mapArea_Paint(对象发送器、PaintEventArgs e)
{
g=e.图形;
if(Rectangles.Count!=0)
g、 Draw矩形(Pens.LightGray,Rectangles.ToArray());
}
私有void游戏编辑器\u SizeChanged(对象发送方,事件参数e)
{
mapArea.Size=新尺寸(this.Size.Width,this.Size.Height);
}
私有无效映射选项卡\新建映射\创建映射\单击(对象发送方,事件参数e)
{
对于(int i=0;i

此外,我似乎找不到如何在面板中通过鼠标实现放大/缩小/移动,可以吗?

尝试在更改其大小后调用
mapArea.Invalidate()
。当数据更改时,需要通过使面板无效来触发绘制事件。-要实现缩放,您可以使用g.ScaleTransform缩放图形对象。谢谢各位,我会尝试,然后回复。注意:您似乎要存储/缓存图形对象。不要这样做!只有
Paint
事件中的
e.Graphics
对象保证有效!您可以将其传递给立即使用它的函数,但不能将其保留以供以后使用!非常感谢,我有预感我不应该那样做。编辑:第一个问题已经解决,mapArea.Invalidate()作为一个符咒,谢谢@adv12