-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 回答