Public Class Form1
' Declaro los controles que vamos a usar en este form:
Dim Label_Origen As New Label
Dim Label_Destino As New Label
Dim Label_FileName As New Label
Dim Label_Restantes As New Label
Dim WithEvents Button_Copiar As New Button
Dim ProgressBar_1 As New ProgressBar
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Size = New Point(420, 320)
' Le otorgo las propiedades a los controles
' -------------------------------------------------------
' Label Origen
Dim Fuente As New Font("Sans Serif", 20, FontStyle.Regular) ' Seteo la fuente personalizada que quiero usar, porque me apetece usar una distinta y así aprendes xD
Label_Origen.Font = Fuente
Label_Origen.Text = "Origen: " & Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\Fonts"
Label_Origen.AutoSize = False
Label_Origen.Size = New Point(640, 40)
Label_Origen.Location = New Point(0, 0)
' Label Destino
Label_Destino.Font = Fuente
Label_Destino.Text = "Destino: " & Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) & "\Test" ' O Environment.SpecialFolder.ProgramFilesX86
Label_Destino.AutoSize = False
Label_Destino.Size = New Point(640, 40)
Label_Destino.Location = New Point(0, 50)
' Botón Copiar
Button_Copiar.Size = New Point(180, 80)
Button_Copiar.Text = "Copiar!"
Button_Copiar.Location = New Point(100, 100)
AddHandler Button_Copiar.Click, AddressOf Button_Copiar_Sub ' Añado el evento "Click" que sucede cuando pinchas el botón, y se llama a la subrutina "Button_Copiar_Sub"
' ProgressBar_1
ProgressBar_1.Size = New Point(180, 20)
ProgressBar_1.Location = New Point(100, 200)
' Label FileName
Label_FileName.AutoSize = True
Label_FileName.Location = New Point(100, 230)
' Label Restantes
Label_Restantes.AutoSize = True
Label_Restantes.Location = New Point(100, 250)
' Añado los controles al form principal:
Me.Controls.Add(Label_Origen)
Me.Controls.Add(Label_Destino)
Me.Controls.Add(Button_Copiar)
Me.Controls.Add(ProgressBar_1)
Me.Controls.Add(Label_FileName)
Me.Controls.Add(Label_Restantes)
End Sub
Private Sub Button_Copiar_Sub(sender As Object, e As EventArgs)
' Seteo las variables de origen y destino de carpetas
Dim Origen As String = Label_Origen.Text.Split(" ")(1)
Dim Destino As String = Label_Destino.Text.Split(" ")(1)
' Creo un array con todos los archivos del directorio de origen
Dim Directory As New System.IO.DirectoryInfo(Origen)
Dim Array_Files As System.IO.FileInfo() = Directory.GetFiles("*")
' A la progressBar tenemos que darle un valor "Máximo" (SIEMPRE) (El máximo por defecto es 100, pero si tenemos 101 archivos nos joderá porque no podemos sobrepasar el Máximo),
' Ese valor en este caso es el número total de archivos que contiene el directorio.
ProgressBar_1.Maximum = Array_Files.Length
' Por cada archivo del Array, sumamos un valor a la ProgressBar, y realizamos las operaciones de copiado o lo que queramos...
For Each File In Array_Files
Label_FileName.
Text = "Archivo copiado: " & File.
Name Label_FileName.Update() ' Como no estoy usando threads, tengo que actualizar el estado del label para darle prioridad y que se muestre correctamente, lo cúal ralentiza bastante (BASTANTE) el proceso. Para estas cosas ya te digo que se deben usar Threads + delegados
Threading.Thread.Sleep(20) ' Le hago esperar 20 ms a este hilo símplemente para que veas bien como se actualiza el proceso de la barra de progreso.
ProgressBar_1.Value += 1
Label_Restantes.Text = "Faltan " & (ProgressBar_1.Maximum - ProgressBar_1.Value) & " archivos por copiarse"
Label_Restantes.Update() ' Otra vez el update necesario para poder mostrar el estado del label, más ralentización para el hilo, de verdad, estudia sobre los threads y cuando sepas algo te ayudaré a entenderlos y usarlos.
Next
' Devolvemos los valores originales a la ProgressBar y modificamos los valores de los labels
ProgressBar_1.Value = 0
ProgressBar_1.Maximum = 100
Label_FileName.Text = Nothing
Label_Restantes.Text = "Todos los archivos copiados."
End Sub
End Class