Bueno, quien no tuvo este problema? Querer hacer un doble click en un nodo y realizar una acción pero sin que el nodo se expanda?
Tuve este problema y en internet no hay ninguna solución. Entonces decidí postear la que se me ocurrió, que la verdad funciona muy bien y es muy sencilla.
Suponiendo que el treeview se llama tvTree y que ya tiene nodos agregados:
Public cancelAction As Boolean = True
Private Sub tvTree_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles tvTree.BeforeExpand
e.Cancel = cancelAction
End Sub
Private Sub tvTree_BeforeCollapse(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles tvTree.BeforeCollapse
e.Cancel = cancelAction
End Sub
Private Sub tvTree_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tvTree.MouseDown
Dim node as Treenode = tvTree.GetNodeAt(e.X, e.Y)
If node.Bounds.IntersectsWith(New Rectangle(e.X, e.Y, e.X, e.Y)) Then
cancelAction = True
Else
cancelAction = False
End If
End Sub
Espero les sirva.
Saludos!
#EDIT
Encontre una
mejora para el codigo sitado arriba. Funciona mucho mejor y no tiene resultados indeseados. Todas las modificaciones son en
tvTree_MouseDownSe contempla si los nodos tienen imagenes o no.
Dim node As TreeNode = TreeView1.GetNodeAt(e.X, e.Y) 'Obtengo el nodo donde hice click
If node Is Nothing Then Exit Sub 'Si no hay nodo, salgo
Dim imgWid As Integer = 16 'Ancho de imagen del nodo / imgWid = 0 si no tiene imagen
Dim rect As Rectangle = New Rectangle(node.Bounds.X - imgWid, node.Bounds.Y, node.Bounds.Width + imgWid, node.Bounds.Height)
If rect.Contains(e.X, e.Y) Then
cancelAction = True
Else
cancelAction = False
End If
Otros saludos!