作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用 C#/WindowsForms 编写的程序,可以在面板上绘制圆圈(图形的节点)。我想将一个圆圈拖到另一个地方。
我有一本字典可以去
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);
}
}
最佳答案
正如 John Arlen 在评论中提到的,我不得不将设置新位置和重新绘制移动到 MouseMove,而只留下 MouseDown 来检测节点。然后,在全局 Node 对象和 isDraggingNode bool 变量的帮助下,我能够实现我的目标。谢谢! - 拉科钦
关于c# - 如何在 Windows 窗体中拖动绘制的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13034847/
我是一名优秀的程序员,十分优秀!