上周我一直在尝试修复一个错误。
我有一个面板,在这个面板里面有一个图片框(Map)。
每当您按下鼠标按钮并将其移动到某个位置时,它会移动贴图,但每当您释放鼠标按钮并再次按下鼠标按钮并移动它时,它会返回到贴图的默认位置(但仍然可以拖动)。
我需要它是,每当有人释放按钮按下,并点击和移动它再次进行的立场,它是目前。
我确信它与我的MouseMove
事件有关,我已经尝试了很多方法,但都无法修复它。
下面是我为MouseUp
、MouseDown
和MouseMove
事件编写的代码。
private bool Dragging;
private Point lastLocation;
private void countryMapImage_MouseUp(object sender, MouseEventArgs e)
{
Dragging = false;
lastLocation = e.Location;
}
private void countryMapImage_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Dragging = true;
lastLocation = e.Location;
}
}
private void countryMapImage_MouseMove(object sender, MouseEventArgs e)
{
if (Dragging == true)
{
int dx = e.X - lastLocation.X;
int dy = e.Y - lastLocation.Y;
countryMapImage.Padding = new Padding(Padding.Left + dx, Padding.Top + dy, Padding.Right - dx, Padding.Bottom - dy);
countryMapImage.Invalidate();
}
}
非常感谢你的帮助!
我尝试过改变mousemove padding事件、mousedown和mouseup事件的一些值,但没有解决问题。我已经尝试过寻找一些答案,但没有找到任何解决问题的答案。
1条答案
按热度按时间3df52oht1#
试试这个:当用户单击Map时,捕获光标的位置(在“screen”坐标中)以及Map控件的当前位置。现在,当您移动鼠标(且仅当LButton按下时)计算当前光标位置的增量(在“屏幕”坐标系中)相对于光标位置捕捉到的
MouseDown
事件.然后,将Map控件的新位置设置为在MouseDown
事件中捕获的位置加上delta的总和。使其正常工作的一个关键是获取处理程序事件的
e.Location
,并将该点转换为 * 相对于发送者 * 的屏幕坐标。在这个简单的场景中,不需要处理
MouseUp
事件。