2012-07-02 99 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);