2013-12-23 177 views
0

我有一個TreeView並且ShowPlusMinus被設置爲true。我還希望節點(僅限父母)在單擊文本時進行切換。這是我的NodeMouseClick事件處理程序:TreeView NodeMouseClick - 如何判斷點擊了哪個部分

private void NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
    { 
     if (e.Node.GetNodeCount(true) == 0) 
     { 
      if (MapClick != null) MapClick(this, e); // fire an event that a child was clicked 
     } 
     else 
     { 
      e.Node.Toggle(); 
     } 
    } 

我無法使用AfterSelect,因爲即使節點已被選中,也需要切換。

NodeMouseClick的問題在於,當用戶單擊加號/減號圖標時,它也會被調用。所以節點切換兩次。我需要防止默認行爲,並始終執行自己的切換,或者我需要檢測項目被點擊的位置,並且只在不在加號/減號時進行切換。

回答

8

使用TreeView.HitTest()方法來發現哪個部件被點擊。像這樣的東西(省略你的邏輯,因爲我無法理解它):

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { 
     var hit = treeView1.HitTest(e.Location); 
     if (hit.Location == TreeViewHitTestLocations.Label) { 
      // etc.. 
     } 
    } 
+0

哦,是的,我忘了HitTest。是的,基本上邏輯是如果節點是父節點(文件夾層次結構)則切換節點,或者如果它是子節點(實際的「地圖文檔」)則觸發事件。我會嘗試HitTest。我敢肯定,這將工作! –

相關問題