como usar treeview

fede
27 de Junio del 2005
hola chicos si algun@ sabe como usar el treeview porfa quiero vcer si se puede enlazar con una bd.
Es algo basico lo que pido despues me las rebusco
gracias a todos
fede argentina

Emi
27 de Junio del 2005
Creo que si te doy un ejemplo te será lo mejor:
En mi caso son documentos que mustro en otra ventana....

Recuerda que partimos de una base de datos con lo que queremos....

Para ordenarlos y que se muestren:

Function OrdenaCirculares()
Dim p1 As String
Dim p2 As String
Dim p3 As String
Dim p4 As String
Dim C1 As String
Dim C2 As String
Dim C3 As String
Dim C4 As String

On Error GoTo ARCHIVOS
If optOrdenar(0).Value = True Then 'tipo
p1 = "TIPO"
p3 = "FECHA"
End If
If optOrdenar(1).Value = True Then 'fecha
p1 = "FECHA"
p3 = "TIPO"
End If
If optOrdenar(2).Value = True Then 'circular
p1 = "NUMERO"
p3 = "TIPO"
End If
p2 = "ASUNTO"
Set rsCirculares = dbCirculares.OpenRecordset(Ordenar, dbOpenForwardOnly)
Set nodx = Nothing
tvw.Nodes.Clear
Do Until rsCirculares.EOF
If C1 <> rsCirculares.Fields(p1) Then
Set nodx = tvw.Nodes.Add(, , "A" & rsCirculares.Fields(p1) & CStr(rsCirculares.Fields(2)), CStr(rsCirculares.Fields(p1)), 4)
C1 = rsCirculares.Fields(p1)
C2 = rsCirculares.Fields(2)
End If
Set nodx = tvw.Nodes.Add("A" & rsCirculares.Fields(p1) & C2, tvwChild, "B" & rsCirculares.Fields("ARCHIVO") & (rsCirculares.Fields(2)), rsCirculares.Fields(p3) & " " & rsCirculares.Fields(p2), 2)
rsCirculares.MoveNext
Loop
''''''''''''Esto consigue poner todos, pero separados!
'''''''''''' Do Until rsCirculares.EOF
'''''''''''' If C1 <> rsCirculares.Fields(1) Then
'''''''''''' Set nodx = tvw.Nodes.Add(, , "A" & CStr(rsCirculares.Fields(2)), CStr(rsCirculares.Fields(3)), 1)
'''''''''''' C1 = rsCirculares.Fields(1)
'''''''''''' C2 = rsCirculares.Fields(2)
'''''''''''' End If
'''''''''''' Set nodx = tvw.Nodes.Add("A" & C2, tvwChild, "B" & (rsCirculares.Fields(2)), rsCirculares.Fields(4), 2)
''''''''''''
'''''''''''' rsCirculares.MoveNext
'''''''''''' Loop
nodx.Expanded = False
nodx.EnsureVisible
On Error GoTo 0
Exit Function
ARCHIVOS:
p1 = "Error en la carga de circulares" & vbCrLf
p2 = "Avise al responsable de poner las Circulares" & vbCrLf
MsgBox p1 & p2, vbCritical, "ERROR"
End Function

Para abrir la carpeta:

Private Sub tvw_Expand(ByVal Node As ComctlLib.Node)
If Cargado = True Then
If Node.Selected = True Then
' Select Case Node.Child
Select Case Node.Children
Case Is >= 1
If Mid(tvw.SelectedItem.Key, 1, 1) = "A" Then
tvw.SelectedItem.Image = 5
End If
'Node.Expanded = True
End Select
End If
End If
End Sub

Para reducir la carpeta:

Private Sub tvw_Collapse(ByVal Node As ComctlLib.Node)
Select Case Node.Children
Case Is >= 1
If Mid(tvw.SelectedItem.Key, 1, 1) = "A" Then
tvw.SelectedItem.Image = 4
End If
'Node.Expanded = True
End Select
End Sub

Cuando haces dole click se elige el documento:

Private Sub tvw_DblClick()
Dim Pulsado As String 'para saber qué se pulsa!
Dim I As Integer 'contador para recorrer el arbol
If Left(tvw.SelectedItem.Key, 1) <> "A" Then
Pulsado = tvw.SelectedItem.Key
Pulsado = Mid(Pulsado, 2, Len(Pulsado) - 7)
'aqui pon el codigo para mostrar el documento
'coloca la imagen correcta en el que se quita del pdf
If Seleccionado <> "" Then
For I = 1 To tvw.Nodes.Count
If tvw.Nodes.Item(I).Key = Seleccionado Then
tvw.Nodes.Item(I).Image = 2
End If
Next I
End If
'coloca la imagen de leyendo en el seleccionado y puesto en el pdf
Seleccionado = tvw.SelectedItem.Key
tvw.SelectedItem.Image = 3
End If
End Sub

Para evitar que modifique el arbol:

Private Sub Tvw_AfterLabelEdit(Cancel As Integer, NewString As String)
If tvw.SelectedItem.Index = 1 Then
Cancel = True
MsgBox "No se puede Cambiar el Nombre" ' & tvw.SelectedItem.Text & " con " & NewString
End If
End Sub

Private Sub Tvw_BeforeLabelEdit(Cancel As Integer)
' If tvw.SelectedItem.Index = 1 Then
MsgBox "No se puede Cambiar el Nombre" ' & tvw.SelectedItem.Text
Cancel = True
' End If
End Sub