我有一个问题,关于当滚动操作将其从视图中移除时,如何防止在面板控件上绘制的某些内容被删除。
我要做的是创建一个2D平铺地图编辑器。只要面板上发生鼠标单击事件,就应该在面板上绘制一个图块。我有这个工作正常。但是,如果我将对象放在面板上并滚动到一侧,然后向后滚动,我放置的对象就会消失。
我做了一些研究,并且看到了关于实施绘画事件的建议。问题是我不明白在这里实施什么。我认为我的大多数挣扎都来自于不完全理解Graphics对象。
以下是我的一些代码:
private void canvas_MouseClick(object sender, MouseEventArgs e)
{
Graphics g = canvas.CreateGraphics();
float x1 = CommonUtils.GetClosestXTile(e.X);
float y1 = CommonUtils.GetClosestYTile(e.Y);
if (currentTile != null)
{
g.DrawImage(currentTile, x1, y1);
me.AddTile((int)currX, (int)currY, (int)x1, (int)y1, "C:\\DemoAssets\\tileb.png");
}
else
{
// dont do anything
}
g.Dispose();
}
private void canvas_Paint(object sender, PaintEventArgs e)
{
// update here?
}
答案 0 :(得分:1)
要保存多个Tiles,您需要一个List来保存每个单击的位置及其关联的tile:
List<Tuple<Image, PointF>> Tiles = new List<Tuple<Image, PointF>>();
private void canvas_MouseClick(object sender, MouseEventArgs e)
{
if (currentTile != null)
{
float x1 = CommonUtils.GetClosestXTile(e.X);
float y1 = CommonUtils.GetClosestYTile(e.Y);
Tiles.Add(new Tuple<Image, PointF>(currentTile, new PointF(x1, y1)));
canvas.Refresh();
me.AddTile((int)currX, (int)currY, (int)x1, (int)y1, "C:\\DemoAssets\\tileb.png");
}
}
private void canvas_Paint(object sender, PaintEventArgs e)
{
foreach (Tuple<Image, PointF> tile in Tiles)
{
e.Graphics.DrawImage(tile.Item1, tile.Item2);
}
}