2016-09-09 47 views
2

我在windows窗體一個TreeView。當我左鍵單擊treeview中的一個節點e.Node顯示正確的值,但是當我右鍵單擊相同的節點時,e.Node在trreview Afterselect事件中顯示父節點值。可能是什麼原因,我怎樣才能得到實際的節點,甚至在右鍵點擊?Windows窗體:樹形AfterClick發生的應對不同的鼠標左鍵和單擊鼠標右鍵

private void trView_AfterSelect(object sender, TreeViewEventArgs e) 
{  
    //e.Node is parent Node at Right click 
    //e.Node is correct node at Left Click 
     if (e.Node.IsSelected) 
     { 


     } 
} 
+2

[右擊選擇.Net的樹節點(http://stackoverflow.com/questions/4784258/right-click-select-on-net-treenode) –

回答

1

鏈接的帖子說明如何使用MouseDown選擇節點。但你應該知道,當你在TreeView,而你想要讓+/-執行它的原始操作點擊+/-MouseDown事件也觸發。所以通常你需要檢查一些其他標準,以防止不必要的TreeView行爲:

  • 您可以檢查是否按下鼠標是不是在+/-通過檢查TreeViewHitTest方法的結果。

  • 您可以檢查是否鼠標按下事件是由鼠標右鍵,通過檢查事件參數的Button屬性觸發。

private void treeView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    TreeNode node = null; 
    node = treeView1.GetNodeAt(e.X, e.Y); 
    var hti = treeView1.HitTest(e.Location); 

    if (e.Button != MouseButtons.Right || 
     hti.Location == TreeViewHitTestLocations.PlusMinus || 
     node == null) 
    { 
     return; 
    } 
    treeView1.SelectedNode = node; 
    contextMenuStrip1.Show(treeView1, node.Bounds.Left, node.Bounds.Bottom); 
} 
相關問題