gpt4 book ai didi

c# - 如何在 Windows 窗体中拖动绘制的形状

转载 作者:行者123 更新时间:2023-11-30 13:03:24 25 4
gpt4 key购买 nike

我有一个用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com