2012-07-02 100 views
-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; 
} 

它不工作。我猜游标有问题。我的想法是将节点的位置与鼠标的位置进行比较。 谢谢了!

+3

什么是您的示例中的节点? –

+1

为什么要添加鼠标位置和鼠标位置的绝对?这是位置的两倍或0. –

+0

我使用图形绘制节点,它是矩形类型。节点类包含节点的内容,如id,name。 – Axess

回答

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);