martes, 9 de marzo de 2010

Buscar en un TreeView en vb.net

Buscar por la clave

Ejemplo en visual basic.net del método Find del objeto nodes de un control treeview , para buscar un nodo por la clave o key Para el ejemplo colocar en un formulario un control Treeview llamado treeview1 , un textBox llamado TextBox1 y un control Button llamado Button1
Nota: En el ejemplo se busca en todos los nodos que contenga el Treeview.
Para buscar solo en el nodo seleccionado o en un nodo específico , cambiar la línea Treeview.nodes
treeview.Nodes.Find(key, True)

... por el objeto SelectedNode o el nodo concreo en el que se quiera buscar:
TreeView1.SelectedNode.Nodes.Find(Clave, True)

Código fuente en un form
Option Explicit On
Option Strict On

Imports System.IO

' cargar algunos elementos en el control treeview
'******************************************************
Public Class Form1

Private Sub Cargar_Elementos()

With TreeView1
' borrar todo
.Nodes.Clear()
' para ver la selección cuando pierde el foco
.HideSelection = False
End With

' Agregar un nodo principal
Dim nRoot As TreeNode = TreeView1.Nodes.Add("c:\", "c:\")

nRoot.Nodes.Add("Windows", "Windows")

' SubNodo de c:\
''''''''''''''''''''''''''''''''''''''''''

Dim DirParent As New DirectoryInfo("c:\windows")

' Obtener las carpetas de "c:\windows"
For Each directorio As DirectoryInfo In DirParent.GetDirectories()

Dim nodo As New TreeNode ' nuevo item

' Establecer el texto y el key o clave
With nodo
nodo.Text = directorio.Name.ToString
nodo.Name = directorio.Name.ToString
' agregar este elemento
nRoot.Nodes(0).Nodes.Add(nodo)
End With
Next

' expandir el nodo c:\
TreeView1.Nodes("c:\").Expand()

End Sub

Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Button1.Text = "Buscar"
Cargar_Elementos()

End Sub
' botón para buscar
'***************************
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

With TreeView1
' Indicar la clave a buscar , el tipo de búsqueda
' ( Si se encuentra retorna una matriz de nodos )
Dim ret As TreeNode() = .Nodes.Find(TextBox1.Text, True)

If ret.Length = 0 Then
MsgBox("No se encontró", MsgBoxStyle.Information)
Else
' mostrar los datos
Dim sRet As String = "Nombre del nodo : " & ret(0).Name & vbCrLf & _
"índice del nodo " & ret(0).Index

MsgBox(sRet.ToString, MsgBoxStyle.Information)

' seleccionar el nodo
.SelectedNode = ret(0)
.SelectedNode.Expand() ' expandir

End If
End With
End Sub
End Class

1 comentario: