4

我有一个用 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);
        }
    }
4

1 回答 1

0

正如 John Arlen 在评论中提到的,我不得不移动设置新位置并重新绘制到 MouseMove,只留下 MouseDown 用于检测节点。然后,在全局 Node 对象和 isDraggingNode 布尔变量的帮助下,我能够实现我的目标。谢谢!- 拉克钦

于 2014-09-03T13:26:36.003 回答