2014-02-11 2 views
0

У меня проблема с litle, делающая то, что я хочу. То, что я хочу, довольно просто. Я делаю защиту башни игры для школы. Когда я нажал на башню на место, я хочу увидеть башню, когда переезжаю через мой фотоаппарат, где все происходит. Это не проблема, когда я двигаюсь, он делает то, что я хочу. Но когда я перестаю перемещать свою мышь, я хочу, чтобы изображение оставалось на том месте, где оно было последним (MouseHover). Но я не получаю событие mousehover, чтобы делать то, что я хочу. Когда я перестаю перемещать мышь, изображение исчезает, и ничто не отображается на моем ящике.DrawImage on mouseHover после MouseMove

Это то, что я в настоящее время для моего MouseMove & MouseHover: Примечание: Я уже пытался использовать MousePosition в случае MouseHover, но это не работает. Надеюсь, кто-то может помочь мне в этом?

private void picGameArea_MouseMove(object sender, MouseEventArgs e) 
    { 


     Pen myPen = new Pen(Color.Black); 
     if (myGameLogic.tmpTower != null) 
     { 
      Xpos = e.X; 
      YPos = e.Y; 
      Graphics paper; 
      paper = picGameArea.CreateGraphics(); 
      paper.DrawImage(myGameLogic.tmpTower.myImage, e.X - 25, e.Y -25, 50, 50); 
      paper.DrawEllipse(myPen, e.X - myGameLogic.tmpTower.Range, e.Y - myGameLogic.tmpTower.Range , myGameLogic.tmpTower.Range * 2, myGameLogic.tmpTower.Range * 2); 
      picGameArea.Invalidate(); 

     } 
    } 

    private void picGameArea_MouseHover(object sender, EventArgs e) 
    { 
     Graphics paper; 
     paper = picGameArea.CreateGraphics(); 
     if (myGameLogic.tmpTower != null) 
     { 

      paper.DrawImage(myGameLogic.tmpTower.myImage, Xpos - 25, YPos - 25, 50, 50); 
     } 
     picGameArea.Invalidate(); 
    } 

ответ

0

Изображение исчезает, потому что ваш следующий Paint событие перерисовки picGameArea и внутри этого события ничего не перерисуйте образ tmpTower.

У вас есть 2 варианта:

  • перемещение tmpTower утягивающее Paint события.
  • включить опрос перерисовать то, что нарисовано сверху с помощью таймера.

Есть ошибки в коде:

  • CreateGraphics необходимые распоряжения, положить его в using или вызвать paper.Dispose();
  • нет необходимости обращаться MouseHover вообще, это событие используется для чего-то, как показывает ToolTip, это вызывает только раз если указатель мыши находится внутри управления для некоторое время.
  • вызова Invalidate события очередь краски (это как спрашивать пожалуйста, перерисовывать мой контроль через некоторое время, когда у вас есть время), вместо того, чтобы использовать Refreshперед тем живописи (и удалить Invalidate).

Последний действительно исправит вашу проблему ...

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