Librería de Snippets para VB.NET !! (Compartan aquí sus snippets)

Iniciado por Eleкtro, 18 Diciembre 2012, 22:23 PM

0 Miembros y 3 Visitantes están viendo este tema.

z3nth10n

Syntax le haría falta uno de SoundCloud, porque no le damos una sorpresa entre los dos? :silbar:

Interesados hablad por Discord.

Eleкtro

#201
Cita de: Ikillnukes en 22 Junio 2013, 20:29 PMSyntax le haría falta uno de SoundCloud, porque no le damos una sorpresa entre los dos? :silbar:

Se le dieron las herramientas necesarias, es fácil usar RegEx, solo tiene que mostrar sus progresos intentando hacer el code y...

Saludos








z3nth10n

Y el code que le presté yo no servía? Por ahí leí como obtener el contenido de un atributo. En ese caso era innerHTML, y luego de como seleccionar dicha variable, con un GetElementByClassName :silbar:

No se hubiese podido hacer así, es que bueno, también el lo probó, pero no iba, ya no se si era, porque el code que le había pasado no obtenía el contenido de susodicho Class de Html, o porque realmente si lo obtenía pero no coincidía el nombre del Class.

Interesados hablad por Discord.

Eleкtro

Cita de: Ikillnukes en 22 Junio 2013, 20:54 PMY el code que le presté yo no servía?

Si, se puede parsear el XML usando RegEx o usando las classes de .net para estructurar los documentos xml,
ahora ...yo no probé tu código, los NODOS XML y yo no nos llevamos muy bien.

Saludos!








z3nth10n

 ;D ;D ;D

xD XML es incompatible contigo xD

En fín, dentro de un poco posteo un Updater que estoy haciendo. :P

Interesados hablad por Discord.

z3nth10n

#205
Pues me precisa hacer doble post, si lo quieres unir hallá tu... :rolleyes:




Pos bueno aquí os traigo un updater que he hecho en 3 mins. :laugh:

Código (vbnet) [Seleccionar]
'Updater creado por Ikillnukes
' Ejemplos: Updater.Comprobar("https://dl.dropboxusercontent.com/s/2iin21gf8g629j9/upt.txt?dl=1", ".\Temp\", "1")
'La url puede ser de cualquier tipo yo recomiendo que uséis Dropbox, puesto que es directo y la url no sufre cambios.
'El directorio puede ser cualquier sitio
'El texto es la cadena que se va a comprobar, en caso de que no sea la misma que la del texto descargado previamente en Updatear, se va a llevar a acabo la funcion Updatear

Imports System.Net
Imports System.IO
Imports System.Diagnostics

Public Class Updater

Public Shared Sub Comprobar(ByVal url As String, ByVal directorio As String, ByVal texto As String)
       Dim patha As String = directorio & "upt.txt"
       Dim patha2 As String = directorio & "Update.zip"
       Dim patha3 As String = directorio & "upt.exe"

       If File.Exists(patha) Then
           File.Delete(patha)
       End If

       If File.Exists(patha2) Then
           File.Delete(patha2)
       End If

       If File.Exists(patha3) Then
           File.Delete(patha3)
       End If

       If Not File.Exists(patha) Then
           My.Computer.Network.DownloadFile(
       url,
       patha)
       End If

       If File.Exists(patha) Then

           Dim lines As String() = File.ReadAllLines(patha)

           If Not lines(0) = texto Then
               If MsgBox("¡Atención! Su aplicación está desactualizada." & vbCrLf & "Pulse ""Sí"" para continuar con la instalación. O ""No"" para descartar cambios.", MsgBoxStyle.YesNo, "¡Atención! Su app está desactualizada...") = MsgBoxResult.Yes Then
                   My.Computer.Network.DownloadFile(
           lines(1),
           patha2)
                   Extraer.Extraer(patha2, directorio)
                   Dim psi As New ProcessStartInfo()
                   psi.UseShellExecute = True
                   psi.FileName = patha3
                   Process.Start(psi)
                   Application.Exit()
               End If
           End If

       End If
   End Sub

End Class


Bueno, pues aquí dejo para que se compruebe cada X secs la app si está a la última:

Código (vbnet) [Seleccionar]
'Casi todas las cosas que hay aquí son conocimientos adquiridos gracias a Elektro, GRACIAS TÍO :D

Dim url As String = "https://dl.dropboxusercontent.com/s/2iin21gf8g629j9/upt.txt?dl=1" 'Esta es la Url de donde va a comprobarse todo
   Dim texto As String = INI_Manager.Load_Value(".\Test.ini", "AppVer") 'Aquí está la cadena de texto que se chekea

   Sub Updatear() 'Función de updatear, me estoy pasando un poco con los comentarios no? xD
       Updater.Comprobar(url, ".\Temp\", texto)
   End Sub

   Dim WithEvents temer As New System.Windows.Forms.Timer With {.Interval = 15000, .Enabled = True} 'Aquí se define el Timer y sus properties dinámicamente, cortesía de Elektro, EDITADO :)

   Private Sub Temer_Start(sender As Object, e As EventArgs) Handles temer.Tick
       Updatear() 'Aquí se chekea cada 15 secs esa función
   End Sub


Por último, como deberíais poner el archivo de texto, para que se compruebe correctamente todo:

Citar1
https://dl.dropboxusercontent.com/s/z8tzsxlyk5z4gdp/Pack%20de%20mods%20Falso.zip?dl=1

Explicación:

Citar1 #Es la String a comprobar#
https://dl.dropboxusercontent.com/s/z8tzsxlyk5z4gdp/Pack%20de%20mods%20Falso.zip?dl=1 #Es el link que se va a descargar en caso de Update, es decir que aquí debería ir la app con la Update#

Bueno, pues para la próxima versión, le voy a poner un Download Async para que cuando se descargue la Update se pueda ver en un Progress Bar para ver el progreso de la descarga.

Por si no fuera poco, para superarme, voy a hacer una mini-app, para subir paquetes de Updates de las apps que hagáis con DropNet, para que solo tengáis que darle a un botón y vuestros usuarios estén a la última.

Un saludo.
Que os parece?
PD: Tengo una duda... El "temer" sigue activado en los otros forms? Es que recuerdo que tuve un conflicto con un Timer en otro Form y era por que no lo pasaba




Como habréis visto, en un comentario llamo a una función llamada Extraer

aquí os dejo el Snippet:

Código (vbnet) [Seleccionar]
'Extractor sacado de por ahí y adaptado por mí
'PD: Solo funciona con .Zips, creo xD
' Ejemplo: Extraer.Extraer("File.zip", ".\Directorio A Extraer\SubDirectorio")

Imports Ionic.Zip

Public Class Extraer

   Public Shared Sub Extraer(ByVal ZipAExtraer As String, ByVal DirectorioExtraccion As String)
       Try

           Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer)
               Dim e As ZipEntry
               For Each e In zip1
                   e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently)
               Next
           End Using

       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
   End Sub

End Class


Por sí queréis comprimir:

Código (vbnet) [Seleccionar]
'Compresor sacado de por ahí y adaptado por mí
' Ejemplo: Comprimir.Comprimir(".\Directorio A Comprimir\SubDirectorio", "File Compreso.zip")

Imports Ionic.Zip

Public Class Comprimir

   Public Shared Sub Comprimir(ByVal NombreDirectorio, ByVal NombreGuardar)
       Using zip As ZipFile = New ZipFile()
           zip.AddDirectory(NombreDirectorio)
           zip.Save(NombreGuardar)
       End Using
   End Sub

End Class


Puede que próximamente puede que haga uno para que se pueda comprimir archivo por archivo, aunque va a ser bastante trabajo.... :-\

PD: Se necesita la librería de Ionic.Zip

Citar... solamente necesitaremos referenciar a nuestro proyecto la librería que está dentro de la siguiente ruta: "DotNetZipLib-DevKit-v1.9 –> zip-v1.9 –> Debug". La librería a referenciar es la "Ionic.Zip.dll"




Otro mini-snippet que he sacado de por ahí (para leer X línea de un Txt):

Código (vbnet) [Seleccionar]
Dim lines As String() = IO.File.ReadAllLines("archivo.txt")
'Ejemplo: lines(1) 'esto lee la línea 2 del archivo.txt

Interesados hablad por Discord.

Eleкtro

#206
Cita de: Ikillnukes en 23 Junio 2013, 00:51 AM
Código (vbnet) [Seleccionar]
Dim WithEvents temer As System.Windows.Forms.Timer 'Aquí se define el Timer dinámicamente que posteriormente será creado, cortesía de Elektro :)

¿cortesía mía?, ¿seguro?, que yo recuerde nunca te hablé de Timers xD, pero ya que estamos, voy con mi sugerencia...

Fíjate aquí:
Cita de: Ikillnukes en 23 Junio 2013, 00:51 AM
Código (vbnet) [Seleccionar]

   Dim WithEvents temer As System.Windows.Forms.Timer 'Aquí se define el Timer dinámicamente que posteriormente será creado, cortesía de Elektro :)

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       temer = New System.Windows.Forms.Timer 'Aquí se crea finalmente
       temer.Interval = 15000 'Aquí los ms que tarda en comprobar si la app está updateada
       temer.Start() 'Aquí comienza a contar
   End Sub


Esa parte la puedes mejorar, y mucho.

1. Puedes declarar un objeto e instanciarlo al mismo tiempo con "New".
2. Además puedes modificar sus propiedades e inicializarlo (timer.start) con "With".
3. ...Todo en la misma línea, y así el Sub:"Form1_Load" sobraría complétamente.

Aquí tienes:

Código (vbnet) [Seleccionar]
Public Class Form1

   Dim WithEvents temer As New Timer With {.Interval = 15000, .Enabled = True} 'Ahora si que es cortesía de Elektro :)

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       ' Nothing to do here
   End Sub

End Class


PD: Apréndete estas pequeñas cosas para ahorrar código.

Saludos!








z3nth10n

#207
Pues gracias por el comentario, y por lo demás no me dices nada? :P

*Voy a arreglar esto mientras que tu editas el post y miras mi MP*

Por cierto, como arranco el Timer? ;)

PD: Con lo de cortesía me refiero a que tu me enseñaste a crear controles dinámicamente :P

Interesados hablad por Discord.

Eleкtro

#208
Cita de: Ikillnukes en 23 Junio 2013, 01:22 AMPor cierto, como arranco el Timer? ;)

Al modificar la propiedad enabled a True se "auto-arranca", porque no lo hemos detenido (stop()) antes de activarlo.

Saludos








z3nth10n

#209
*Es verdá tu lo que dice "el" Elektro* ;D

Ok muchas gracias por la info... Entonces, si no mal recuerdo, ese timer va a estar arrancado por los siglos de los sig.... Hasta que una mano inocente le de al botón de cerrar? :xD
Estaría bien que nunca se parase, el virus del Updater de Ikillnukes :xD :xD

Por cierto, y lo demás que me comentas, que opinas, has ido a saco al Timer y no me has comentado nada sobre lo demás. :¬¬ :xD :xD

Interesados hablad por Discord.