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