我做了我想要的事情。 我想要的很简单。 我正在为学校做一个游戏塔防。 当我点击一个塔放置时,我想看到塔在移动我的图片框时发生的一切。当我移动它做我想要的时候没问题。但是当我停止移动我的鼠标时,我希望图像保持在它最后的位置(MouseHover)。 但我没有得到mousehover事件来做我想要的。当我停止移动我的鼠标时,图像消失,我的图片框中没有显示任何内容。
这是我目前用于MouseMove& amp; MouseHover: 注意:我已经尝试在mousehover事件中使用MousePosition,但这也不起作用。我希望有人可以帮我解决这个问题吗?
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 :(得分:1)
图片消失,因为您的下一个Paint
事件会重绘picGameArea
,在该事件中,任何内容都不会重绘tmpTower
的图片。
您有两个选择:
tmpTower
事件中移动Paint
。您的代码中存在错误:
CreateGraphics
需要处理,将其放入using
或致电paper.Dispose()
; MouseHover
,此事件用于显示ToolTip
之类的内容,如果鼠标位于一次 >一段时间。Invalidate
事件将对队列进行排队(这就像要求一样,稍后重新绘制我的控件,当你有时间时),而是先使用Refresh
绘画(并删除Invalidate
)。最后一个实际上也会修复你的问题......