2013-11-16 2 views
0

У меня возник вопрос относительно того, как я могу помешать некоторому контенту, нарисованному на панели управления, стереть, когда действие прокрутки выведет его из вида.Как предотвратить удаление содержимого панели при прокрутке

То, что я пытаюсь сделать, это создать 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? 
    } 

ответ

1

Провести несколько плиток, вам нужен список, чтобы держать каждый нажал местоположение вместе с ассоциированной плиткой:

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); 
     } 
    } 
+0

Благодаря Idle_Mind! Это прекрасно работает и имеет смысл для меня! – urbanspr1nter

Смежные вопросы