我有一个用C#/ WindowsForms编写的程序,可以在Panel上绘制圆圈(图形的节点)。 我想将一个圆圈拖到另一个地方。
我有一本字典
Dictionary NodeMap<Node,Point>;
所以从这个和MouseDown事件我可以找出我拖动的节点。
问题是目前它没有拖动节点,只是在新位置重新绘制它,所以我必须多次单击才能移动它。
这部分的代码是:
private void pnlCanvas_MouseDown(object sender, MouseEventArgs e)
{
Node grabbedNode = new Node("-1");
Point loc = e.Location;
loc.X = (int) (loc.X * 1000.0 / pnlCanvas.ClientSize.Width);
loc.Y = (int) (loc.Y * 1000.0 / pnlCanvas.ClientSize.Height);
foreach (var n in NodeMap)
{
if ((Math.Abs(n.Value.X - loc.X) < (sldNodeSize.Value)) && (Math.Abs(n.Value.Y - loc.Y) < (sldNodeSize.Value)))
{
grabbedNode = n.Key;
break;
}
}
if (grabbedNode.Id != "-1")
{
NodeMap.Remove(grabbedNode);
NodeMap.Add(grabbedNode, loc);
DrawGraph((short)sldNodeSize.Value);
}
}
答案 0 :(得分:0)
John Arlen在评论中提到,我不得不移动设置新位置并重新绘制到MouseMove,只留下MouseDown用于检测节点。然后,在全局Node对象和isDraggingNode布尔变量的帮助下,我能够实现我的目标。谢谢! - rakoczyn