2013-12-23 167 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。我敢肯定,这将工作! –

相关问题