Está en la página 1de 6

TREEVIEW y LISTVIEW

Imports System
Imports System.Windows.Forms
Imports System.Text
'Para manipular archivos grficos
Imports System.Drawing
Imports System.Drawing.Imaging

'Para manipular directorios y ficheros


Imports System.IO
'Para iniciar y detener procesos del sistema local
Imports System.Diagnostics
variable que van despus de la herencia
Dim ajustar As Boolean = True
' Variable para ser utilizada en el mtodo btAbrir_Click
Dim nombreImg As String = ""

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
'rellenar el Combobox con las letras de unidad del sistema:
'array de cadenas para contener los nombres de las unidades
Dim drives() As String
'rellenar el array con las unidades lgicas del sistema
drives = System.Environment.GetLogicalDrives()
'rellenar el Combobox dese el array
Me.cbDrive.Items.AddRange(drives)
lbImg.Text = "Ninguna imagen cargada"
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
cbDrive.SelectedIndexChanged
Try
'la clase DirectoryInfo expone mtodos de instancia para _
'crear, mover y enumerar archivos en directorios y
subdirectorios;
'se utiliza la clase DirectoryInfo para operaciones
tpicas como copiar, _
'mover, cambiar de nombre, enumerar, crear y eliminar
directorios.
'obtener los directorios de la unidad seleccionada;
Dim combo As New DirectoryInfo(Me.cbDrive.Text)
Dim carpetas() As DirectoryInfo
carpetas = combo.GetDirectories()
'limpiar el Treeview
tvDir.Nodes.Clear()
'rellenar el Treeview con los nombres de los directorios;
'TreeNode representa a los nodos del Treeview
Dim carpetas2 As DirectoryInfo
Dim nodo As TreeNode
For Each carpetas2 In carpetas
'el constructor de la clase Treenode inicializa una
nueva instancia _
'aqu se usa con 3 parmetros: _
'1 - el texto de etiqueta especificado _
'2 - la imagen que se ha de mostrar cuando el nodo de
rbol est _
'seleccionado (ndice del Imagelist).
'3 - la imagen que se ha de mostrar cuando el nodo de
rbol est _
'sin seleccionar (ndice del Imagelist).
nodo = New TreeNode(carpetas2.FullName, 0, 1)
Me.tvDir.Nodes.Add(nodo)

Next
'Mostrar mensaje del error capturado
Catch pollo As Exception
MessageBox.Show("Mensaje de error: " & pollo.Message,
"Error al leer la unidad " & cbDrive.Text, MessageBoxButtons.OK,
MessageBoxIcon.Error)
cbDrive.Text = "C:\"
End Try
End Sub
Private Sub TreeView1_AfterSelect(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles
tvdir.AfterSelect
Try
'si el nodo del rbol no est expandido
If Not e.Node.IsExpanded Then
'obtener los subdirectorios del nodo seleccionado
Dim carpetas3 As DirectoryInfo
carpetas3 = New DirectoryInfo(e.Node.FullPath)
Dim carpetas4() As DirectoryInfo
carpetas4 = carpetas3.GetDirectories()
'rellenar el Treeview con los nombres de los
subdirectorios;

'TreeNode representa a los nodos del Treeview


Dim subcarpetas As DirectoryInfo
Dim nodo As TreeNode
For Each subcarpetas In carpetas4
'el constructor de la clase Treenode inicializa
una nueva instancia _
'aqu se usa con 3 parmetros: _
'1 - el texto de etiqueta especificado _
'2 - la imagen que se ha de mostrar cuando el nodo
de rbol est _
'seleccionado (ndice del Imagelist).
'3 - la imagen que se ha de mostrar cuando el nodo
de rbol est _
'sin seleccionar (ndice del Imagelist).
nodo = New TreeNode(subcarpetas.Name, 0, 1)
e.Node.Nodes.Add(nodo.Text)
Next
'obtener los archivos del subdirectorio
Dim archivos() As FileInfo
archivos = carpetas3.GetFiles()
'limpiar el Listview
Me.lvImg.Items.Clear()
'rellenar el Listview con los nombres de los archivos
'que cumplan la condicin: terminar por las
extensiones

'de archivos de imagen (se pueden cambiar las que

aparecen aqu)

Dim imagen As FileInfo


For Each imagen In archivos
'a cada extensin se le puede asignar una imagen
diferente eb el Imagelist
Select Case imagen.Extension

Case ".BMP", ".bmp"


Me.lvImg.Items.Add(imagen.Name, 2)
Case ".JPG", ".JPEG", ".jpg", ".jpeg"
Me.lvImg.Items.Add(imagen.Name, 3)
End Select
Next
End If
'si no hay elementos en el Listview, vaicar la caja de
imagen

If Me.lvImg.Items.Count = 0 Then
Me.pbImg.Image = Nothing
Me.lbImg.Text = "Ninguna imagen cargada"
End If

'Mostrar mensaje del error capturado


Catch pollo As Exception
MessageBox.Show("Mensaje de error: " & pollo.Message,
"Error al leer imgenes ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub ListView1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
lvimg.SelectedIndexChanged
'procedimiento descrito ms abajo
Call refrescarImg()
'mostrar informacin sobre ancho y alto de la imagen
seleccionada
Me.lbImg.Text = "Ancho de imagen: " +
pbImg.Image.Width.ToString + _
" px. / Alto de imagen: " + pbImg.Image.Height.ToString +
" px"
End Sub
Private Sub refrescarImg()
Try
'si hay algn elemento seleccionado en el Listview
If Me.lvimg.SelectedItems.Count > 0 Then
'invalidar la regin grfica del Picturebox para
volver a rellenarla
'con la imagen elegida en el control Listview
Me.pbImg.Invalidate()
Me.pbImg.Image = New
Bitmap(Me.tvdir.SelectedNode.FullPath & "\" &
Me.lvimg.SelectedItems(0).Text)
End If
'Mostrar mensaje del error capturado
Catch pollo As Exception
MessageBox.Show("Mensaje de error: " & pollo.Message,
"Error al leer imgenes ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Function fnClipboard() As Object
'Copiar imagen al portapeles
'SetDataObject lleva 2 parmetros (objeto, booleano)
'Si booleano es true, el objeto queda en el portapapeles
'despus de haber cerrado la aplicacin

Clipboard.SetDataObject(pbImg.Image, True)
'Variable objClipboard para contener el portapeles
Dim objClipboard As IDataObject = Clipboard.GetDataObject()
'devuelve el portapapeles como mapa de bits
Return objClipboard.GetData(DataFormats.Bitmap)
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btcopiar.Click
If Not pbImg.Image Is Nothing Then
'funcin detallada en el siguiente bloque
Call fnClipboard()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btajustar.Click
'para que solamente lo haga si hay imagen en la caja de imagen
If Not pbImg.Image Is Nothing Then
'si ya est a tamao real, pasar a modo Ajustado
If ajustar = True Then
'pasar a modo Normal (tamao real)
pbImg.SizeMode = PictureBoxSizeMode.StretchImage
ajustar = False
Else
'si la imagen est en modo Ajustado (Stretch)
pbImg.SizeMode = PictureBoxSizeMode.CenterImage
ajustar = True
End If
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btflip.Click
'para que solamente lo haga si hay imagen en la caja de imagen
If Not pbImg.Image Is Nothing Then
pbImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipX)
pbImg.Refresh() 'Recarga la imagen
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btguardar.Click
'para que solamente lo haga si hay imagen en la caja de imagen
If Not pbImg.Image Is Nothing Then
dlgSave = New SaveFileDialog
dlgSave.Filter = "Mapas de bits (*.bmp)|*.bmp|Imgenes JPG
(*.jpg)|*.jpg"
dlgSave.Title = "Guarda la imagen como..."
If dlgSave.ShowDialog() = DialogResult.OK Then
nombreImg = dlgSave.FileName
If (nombreImg.EndsWith("jpg")) Then
pbImg.Image.Save(nombreImg, ImageFormat.Jpeg)
End If
If (nombreImg.EndsWith("bmp")) Then
pbImg.Image.Save(nombreImg, ImageFormat.Bmp)
End If
End If

End If
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btsalir.Click
Me.Close()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btayuda.Click
MessageBox.Show("Explorador de imgenes realizado en Visual
Basic .NET." + vbCrLf + "Autor: MILIUCO. Fecha: 09/10/2003.", "Acerca
de...", MessageBoxButtons.OK)
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btcode.Click
'Obtener la ruta a la carpeta desde la que se ha iniciado la
aplicacin,
Dim stRuta As String = Application.StartupPath
Try ' para detectar y manipular excepciones (errores del
programa)
'ProcessStartInfo se utiliza para iniciar procesos
Dim abrirDoc As ProcessStartInfo = New ProcessStartInfo
'Aadir a la ruta "\Form1.txt" para abrir el archivo
abrirDoc.FileName = stRuta + "\Form1.txt"
'Informacin al usuario de la ruta obtenida en su sistema
MessageBox.Show("El cdigo del programa se muestra
mediante una instancia del Bloc de Notas." + vbCrLf + "El archivo""
Form1.txt"" ha de estar junto al ejecutable del programa." + vbCrLf +
"La ruta al archivo ""Form1.txt"" en tu sistema debera ser:" + vbCrLf
+ abrirDoc.FileName, "Ver el cdigo", MessageBoxButtons.OK)
print...)

'modo de apertura de archivo (tambin puede ser edit,


abrirDoc.Verb = "open"
'abrir en ventana normal
abrirDoc.WindowStyle = ProcessWindowStyle.Normal
'Abrir el archivo mediante su programa asociado en Windows
Process.Start(abrirDoc)

Catch a As Exception 'Objeto Exception de nombre a


'Mensaje relativo a la excepcin lanzada
MessageBox.Show("Se ha producido la siguiente excepcin:"
+ vbCrLf + vbCrLf + a.Message, "Mensaje de error")
End Try
End Sub

También podría gustarte