-1

ノードをクリックするためのC#のコードがあります:

public Node ChartMouseDownFindNode(Graphics graphics, Font font, Point mousePosition)
{
    this.mousePosition = Cursor.Position;
    Pen pen = new Pen(Color.FromArgb(255, 124, 176, 34), 2);
    foreach (Node node in Nodes)
    {
       Size nodeSize = node.GetNodeSize(graphics, font);
       if (node.Position.X < mousePosition.X + Math.Abs(mousePosition.X) && node.Position.X + nodeSize.Width > mousePosition.X + Math.Abs(mousePosition.X))
            if (node.Position.Y < mousePosition.Y + Math.Abs(mousePosition.Y) && node.Position.Y + nodeSize.Height > mousePosition.Y + Math.Abs(mousePosition.Y))


                return node;
        MessageBox.Show("clicked");



    }
    return null;
}

それは動作しません。カーソルに何か問題があると思います。私の考えは、ノードの位置をマウスの位置と比較することです。どうもありがとう!

4

1 に答える 1

1

あなたの友達のコードが間違っていると思います。これらの if ステートメントの方が優れています。

if (node.Position.X < mousePosition.X && node.Position.X + nodeSize.Width > mousePosition.X)
    if (node.Position.Y < mousePosition.Y && node.Position.Y + nodeSize.Height > mousePosition.Y)

このステートメントの前に、位置座標を一致させる必要がある場合があります。Cursor.Position は画面空間座標にありますが、ノードはクライアント空間座標にある可能性があります。このコードは機能します。

mousePosition = PointToClient(mousePosition);
于 2012-08-23T02:25:43.963 に答える