Estaba ayudando a un user que no sabía como usar una barra de progreso, y bueno, hice este form.
Cuando lo completé me dí cuenta de que a mi me habría servido cuando no sabía hacer nada de esto, así que quiero compartirlo por si a alguien le puede servir
Cita de: Yo en otro foro
Con mi ejemplo puedes aprender a...:
· Crear / Añadir controles en tiempo de ejecución,
· Modificar algunas propiedades de controles
· Asociar el evento de un control en tiempo de ejecución a una subrutina
· Usar las variables de entorno
· Obtener todos los archivos de un directorio
· Crear un array y procesar su contenido
· Usar y conocer una barra de progreso,
· Algunos métodos útiles como "Update"
Eso sí, sin threads, esto es un ejemplo MUY básico.
· Crear / Añadir controles en tiempo de ejecución,
· Modificar algunas propiedades de controles
· Asociar el evento de un control en tiempo de ejecución a una subrutina
· Usar las variables de entorno
· Obtener todos los archivos de un directorio
· Crear un array y procesar su contenido
· Usar y conocer una barra de progreso,
· Algunos métodos útiles como "Update"
Eso sí, sin threads, esto es un ejemplo MUY básico.
PD: En serio, no quiero comentarios como "Esto no vale nada", si no te gusta no comentes, a un novato le servirá.
Código
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... 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