2013-07-24 77 views
0

基本上我有一個treeview填充了許多圖像文件。我試圖讓NodeMouseHover事件調出圖像的一個小預覽。要做到這一點,我需要找出鼠標結束了什麼節點,但我不能得到它的工作,它無法找到光標位置處的樹節點。在光標下得到treenode

下面是一個簡化版本,我的代碼

private void TreeBroswer_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 
    { 
     string filePath; 
     PictureBox preview; 

     TreeNode test = TreeBroswer.GetNodeAt(Cursor.Position.X, Cursor.Position.Y); 
     //Also tried MousePosition.X,MousePosition.Y 

     if (test == null) 
     { 
      MessageBox.Show("No tree node"); 
     } 
     else 
     { 
      filePath = test.FullPath; 
      preview = new PictureBox(); 
      preview.ImageLocation = @filePath; 
      // Display preview 
     } 
    } 

它未能得到樹節點無論在哪裏我的鼠標。 我不確定是否讓我的鼠標位置錯誤,或者我使用的是GetNodeAt錯誤,或兩者兼而有之。

回答

2

該參數的參數事件 - TreeNodeMouseHoverEventArgs - 已經有了您需要的信息。

只需參考e.Node即可查看鼠標當前懸停在哪個節點上。如果你沒有懸停在節點上,事件不會觸發,所以不需要檢查null。

private void TreeBroswer_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) 
{ 
    var preview = new PictureBox { ImageLocation = e.Node.FullPath }; 
    // Display preview 
} 
0

的問題是你在

TreeBrowser.GetNodeAt(Cursor.Position.X, Cursor.Position.Y) 

嘗試更改使用

treeView1.PointToClient(Cursor.Position) 

的參數或使用TreeNodeMouseHoverEventArgs

this.treeView1.GetNodeAt(e.X, e.Y); 
+1

我能用這種方式得到它的工作方式:TreeNode test = TreeBroswer.GetNodeAt(TreeBroswer.PointToClient(Cursor.Position)); – Crispy

+0

@Crispy說什麼很重要。你需要做一個PointToClient轉換,而且沒有任何答案提到這一點。 – user2867342

+0

它有一段時間去了,但我的答案'treeView1' ='treeBrowser',並提到了'PointToClient'的轉換。 – Turbot