VB.NET - Hacer una espera o pausa

Alguna vez es posible que necesitéis que el programa espere un tiempo antes de hacer algo.

Bueno la forma de hacerlo es:

System.Threading.Thread.Sleep(ElTiempoaEsperar)

Cuando llegue ahí el programa esperara el tiempo en milisegundos que le indiquemos.

Por ejemplo, si queremos que espere 3 segundos sería así:

System.Threading.Thread.Sleep(3000)

Readmore »»

VB.Net - Comprobar si tu programa está en ejecución.

Función para comprobar si tu programa está en ejecución.

Te puede servir para que tu programa se ejecute solo una vez.

Te devuelve true si ya está en ejecución.

Function ProgramaEjecutado() As Boolean
If UBound(System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
Return True
Else
Return False
End If
End Function

Readmore »»

VB.Net Dibujar con degradado con Drawin2D

Vamos a ver como podemos darle bonitos colores a nuestros controles a través de la librería Drawin2D

En este ejemplo vamos a hacerlo con un Panel, aunque se puede utilizar con cualquier contenedor que tenga el evento Paint y se pueda poner transparente.

El resultado sería como este:



Bueno vamos al lió!


Lo primero insertamos en el formulario el Panel, y le ponemos en la propiedad BackColor en Transparente (que está en la pestaña Web)

Ahora nos vamos al código e importamos la librería:

Imports System.Drawing.Drawing2D


Ahora nos vamos al evento Paint del panel. Y ponemos esto:

Dim Brocha As LinearGradientBrush
Dim Superficie As Graphics
Dim Rectangulo As Rectangle
Dim Lapiz As Pen

Try

'Aquí igualamos la variable superficie a los argumentos del panel
Superficie = e.Graphics
'Aquí seleccionaremos el color del borde (yo lo he puesto azul oscuro)
Lapiz = New Pen(Color.Navy, 1)

'Le damos el tamaño al rectángulo, cero a la altura y cero a la izquierda y
'el tamaño usamos las propiedades del Panel

Rectangulo = New Rectangle(0, 0, Panel1.Width, Panel1.Height)
'Aquí elegimos los colores del degradado y la forma del degradado
'Aquí esta puesto ForwardDiagonal, es decir, de esquina superior a la esquina inferior
'juega con esa propiedad para ver sus efectos
Brocha = New System.Drawing.Drawing2D.LinearGradientBrush(Rectangulo, Color.White, Color.Navy, LinearGradientMode.ForwardDiagonal)

'Aquí pintamos el cuadrado y luego el borde
Superficie.FillRectangle(Brocha, Rectangulo)
Superficie.DrawRectangle(Lapiz, Rectangulo)

'Lo liberamos de la memoria
Lapiz.Dispose()
Superficie.Dispose()
Catch ex As Exception
'No hacemos nada si falla. Si hay error
End Try




Y listo ya tendríamos nuestro panel decorado!!


Tambien, puedes añadir, por ejemplo, un label al Panel y en el mismo paint del Panel añadir que te pinte el Label de otro color, pasandole las propiedades del label

Rectangulo = New Rectangle(Label1.Left, Label1.Top, Label1.Width, Label1.Height)
Brocha = New System.Drawing.Drawing2D.LinearGradientBrush(Rectangulo, Color.Yellow, Color.LimeGreen, LinearGradientMode.ForwardDiagonal)
Superficie.FillRectangle(Brocha, Rectangulo)
Superficie.DrawRectangle(Lapiz, Rectangulo)

Quedaría así:






Readmore »»

VB.Net - Capturar pantalla

Ahora vamos a crear un jpg que contenga una captura de la pantalla.

Hemos creado una función que devuelve una imagen, usamos el SendKeys para capturar la pantalla y la extraemos del portapapeles, luego llamaremos a la funcion y el resultado lo guardaremos en una ruta del disco duro.
Mira que bonito olle!

Public Function TrincarImagen() As Image

' variable de tipo IDataObject que contiene el portapapeles
Dim objClipboard As IDataObject = Clipboard.GetDataObject()
' método de IDataObject
' devolver el portapapeles como mapa de bits

Dim gr As Graphics = Me.CreateGraphics
' Tamaño de lo que queremos copiar
' En este caso el tamaño de la ventana principal
Dim fSize As Size = Screen.PrimaryScreen.Bounds.Size
' Creamos el bitmap con el área que vamos a capturar
Dim bm As New Bitmap(fSize.Width, fSize.Height, gr)
' Un objeto Graphics a partir del bitmap
Dim gr2 As Graphics = Graphics.FromImage(bm)
' Copiar todo el área de la pantalla
gr2.CopyFromScreen(0, 0, 0, 0, fSize)

Return bm
End Function

Ahora solo queda llamar a la funcion y guardar la imagen. Seria algo asi:


Dim Pantallazo As Image
Pantallazo = TrincarImagen()
Pantallazo.Save("RUTA\pantallazo.jpg")



Listo!

Readmore »»

VB.Net - Exportar DataGridView a Excel

Bueno, lo primero es añadir la referencia Microsoft.Office.Interop.Excel, dependiendo del Office que tengas podrás usar la versión 11 (hasta 2003) o la 12 (2007 jiji).

Bueno en resumen, lo que hago es, crear tres variables, que una sera el programa, el libro y otra la hoja. Luego solo nos queda escribir, y te saldrá un bonito cuento :)

Aquí os dejo la función, no es nada difícil de comprender.


Function GridAExcel(ByVal ElGrid As DataGridView) As Boolean

'Creamos las variables
Dim exApp As New Microsoft.Office.Interop.Excel.Application
Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet

Try
'Añadimos el Libro al programa, y la hoja al libro
exLibro = exApp.Workbooks.Add
exHoja = exLibro.Worksheets.Add()

' ¿Cuantas columnas y cuantas filas?
Dim NCol As Integer = ElGrid.ColumnCount
Dim NRow As Integer = ElGrid.RowCount

'Aqui recorremos todas las filas, y por cada fila todas las columnas y vamos escribiendo.
For i As Integer = 1 To NCol
exHoja.Cells.Item(1, i) = ElGrid.Columns(i - 1).Name.ToString
'exHoja.Cells.Item(1, i).HorizontalAlignment = 3
Next

For Fila As Integer = 0 To NRow - 1
For Col As Integer = 0 To NCol - 1
exHoja.Cells.Item(Fila + 2, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value
Next
Next
'Titulo en negrita, Alineado al centro y que el tamaño de la columna se
ajuste al texto
exHoja.Rows.Item(1).Font.Bold = 1
exHoja.Rows.Item(1).HorizontalAlignment = 3
exHoja.Columns.AutoFit()


'Aplicación visible
exApp.Application.Visible = True

exHoja = Nothing
exLibro = Nothing
exApp = Nothing

Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error al exportar a Excel")
Return False
End Try

Return True

End Function



La función devuelve un True o un False, dependiendo si el resultado ha sido satisfactorio.

Si quieres también le puedes añadir un ProgressBar e ir sumándole uno al valor del Progress dentro del For.


Saludos

Readmore »»

VB.Net - Enviar email

Ahora te voy a explicar como mandar un e-mail con visual basic .NET

Es bastante sencillo, esta sería la función:

Private Sub EnviarCorreo()


Dim smtpCliente As New
System.Net.Mail.SmtpClient("smtp.tudominio.com", 25)
Dim ELCorreo As New
System.Net.Mail.MailMessage("elqueenvia@tudominio.com",
"elquerecibe@dominio.com", "Asunto", "Mensaje")
smtpCliente.Credentials = New System.Net.NetworkCredential("Usuario", "Contraseña")
smtpCliente.Send(ELCorreo)

End Sub



Esa es la función, solo tienes que sustituir los datos por los tuyos :)

Por supuesto está función la podrás parametrizar por ejemplo, con todos los datos parametrizados.


Private Sub EnviarCorreo(ByVal Smtp As String, ByVal De As String, ByVal Para
As String, ByVal Asunto As String, ByVal Mensaje As String, ByVal Usuario As
String
, ByVal Pass As String)


Dim smtpCliente As New System.Net.Mail.SmtpClient(Smtp, 25)
Dim ELCorreo As New
System.Net.Mail.MailMessage(De, Para, Asunto,
Mensaje)
smtpCliente.Credentials = New System.Net.NetworkCredential(Usuario,
Pass)
smtpCliente.Send(ELCorreo)


End Sub


Ya solo queda llamar a la función con los parametros y ¡vuala! mensaje enviado :)


Acabo de actualizar.... si quieres mandar un archivo adjunto, tendrias que poner esto antes del Send

Dim att As New System.Net.Mail.Attachment("RUTAARCHIVO.EXT")
ELCorreo.Attachments.Add(att)

Readmore »»

Aceptar más de una conexión con Winsock

Os voy a mostrar, como podemos aceptar varias peticiones de conexión con Winsock. Aqui doy por hecho, de que conoceis Winsock, solo que está parte es mas rebuscada.

Bueno al tajo, la idea es, mantener el control winsock siempre a la escucha, cuando llegue una petición cargamos otro Winsock y a ese se la asignamos. Así podras tener tantas conexiones quieras!

Veamos, lo primero que tienes que hacer, en el modo diseño, ir a las propiedades del Winsock y en Index poner un 0 (cero). Así conseguimos poder crear un array de controles del Winsock.

Ahora lo pondremos a escuchar, pondremos el primero, ahora mismo el unico winsock que tenemos, que es Winsock1(0), yo lo he hecho en el Load, tu donde tu quieras, un botón, ect.

Private Sub Form_Load()

'Aqui pones el puerto que quieras
Winsock1(0).LocalPort = "666"

'dejo escuchando conexiones entrantes
Winsock1(0).Listen


End Sub
Bien, primero creamos una variable en General para controlar el numero de Winsock que vamos creando y para luego poder usarlos. Yo la he llamado N ( no me he comido mucho la cabeza)

Dim N as Integer

Ahora utilizaremos el evento ConnectionRequest, para aceptar la petición de conexión, pero hay que modificarlo para que nos pille que control usamos, es decir, añadir el Index (lo marco en rojo).

Ahora, hacer mágia! jiji



Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

On Error Resume Next

'Comprobamos que el Index sea el 0, nuestro escuchador de por vida.
If Index = 0 Then
'Sumamos uno al contador de Winsocks
N = N + 1
'Cargamos un nuevo Winsock
Load Winsock1(N)
Winsock1(N).LocalPort = 0
Winsock1(N).Accept requestID 'Aceptamos la conexión

end if

end sub

Listo! Ya tendriamos un winsock conectado. Para usarlo sería por ejemplo:

Winsock(1).SenData "Ou yeah!"

Recuerda que en cada evento del Winsock, tendrás que añadir el Index as Integer.

Readmore »»