visual basic

[Visual Basic] Extensión de métodos

Posted on

Un método de extensión básicamente lo que permite hacer es añadir funcionalidades a clases ya existentes sin tener que utilizar herencia, ni nada semejante.

Un método de extensión debe ser necesariamente un método (sub) o una función (function), y debe ser creado dentro de un módulo. El método de extensión debe ser decorado con el atributo <Extension()> y para que este pueda ser utilizado se debe importar el namespace System.Runtime.CompilerServices.

Ahora para hacer un pequeño demo vamos a crear un método de extensión que tome un string y lo devuela en formato (para el ejemplo vamos a suponer que la cadena enviada siempre será numérica).

El método que creamos estará disponibles para el tipo de dato que le enviemos como primer parámetro a la función.

Entonces lo primero que debemos hacer es añadir un modulo, y dentro de ese modulo declaramos el método de extensión así:

   1:  <Extension()>
   2:  Public Function FormatoMoneda(ByVal sCadena As String) As String
   3:      Return Val(sCadena).ToString("$##,##0")
   4:  End Function

Como ven es una función muy sencilla que simplemente le da el formato deseado, y ahora cuando utilicemos un valor de tipo string y le demos . vamos a tener disponible la función formato moneda. Para verificar el ejemplo vamos a tener una aplicación Windows form (para que sea sencillo) con dos cajas de texto y un botón, y al idea es que cuando se de clic en el botón el número introducido en el primer textbox aparezca en el segundo pero con el formato deseado, así que el código del botón seria:

   1:  txtFormato.Text = txtOriginal.Text.FormatoMoneda()

Y una vez ejecutemos la aplicación tendremos algo como:

Imagen1

Espero les sea de utilidad.

[Visual Basic] Clases parciales

Posted on

Las clases parciales permiten dividir la definición de una clase en varias partes. Las clases parciales no crean múltiples clases, simplemente crean una clase y dicha clase se implementa en diferentes partes.

Para definir una clase parcial basta con colocar antes del class el modificador Partial:

   1:  Partial Class MiClase
   2:  End Class

Ahora un pequeño ejemplo:

1. En un proyecto vamos a crear dos carpetas, la idea será simular que en una carpeta tenemos las clases bases y en la otra vamos a tener las clases que por decirlo de alguna manera siguen con la implementación de dichas clases, algo como:

Imagen1

2. En la carpeta de clases principales vamos a crear una clase que se llame Persona, la cual será pública y parcial, además que va a definir dos propiedades diferentes (nombre y apellido) y un método el cual asignara un valor al nombre, algo bastante simple:

 

   1:  Partial Public Class Persona
   2:      Private Property sNombre As String
   3:      Private Property sApellido As String
   4:   
   5:      Public Sub EstablecerNombre(ByVal nombre As String)
   6:          _sNombre = nombre
   7:      End Sub
   8:  End Class

3. Ahora en la carpeta de clases extendidas creamos una nueva clase llamada Persona y un método que establezca el apellido:

   1:  Public Class Persona
   2:      Public Sub EstablecerApellido(ByVal apellido As String)
   3:          _sApellido = apellido
   4:      End Sub
   5:  End Class

Como se puede observar la clase tiene el mismo nombre, pero al ser una de ellas parcial es compilador no nos genera error.

Ahora una vez utilicemos la clase vamos a disponer de los dos métodos:

   1:  Dim persona1 As New Persona
   2:  persona1.EstablecerNombre("Julio")
   3:  persona1.EstablecerApellido("Apellido")

Claro, el ejemplo que se ha hecho es bastante simple, pero la idea era mostrar el funcionamiento de las clases parciales.

[Visual Basic] Valores únicos GUID

Posted on

GUID es una estructura que permite generar identificadores únicos, su uso es bastante sencillo, simplemente se debe llamar el método NewGuid para generar el identificador.

Vamos a realizar un sencillo ejemplo, la idea es que le usuario pueda ingresar en un campo de texto un número, y la aplicación va a generar ese mismo de identificadores los cuales se visualizarán en un listbox, así el método que nos realizará este proceso será:

   1:  Dim unique As Guid
   2:  For i As Integer = 1 To CInt(txtCantidad.Text)
   3:      unique = Guid.NewGuid()
   4:      lbValores.Items.Add(unique)
   5:  Next

Entonces en la primera línea declaramos una variable de tipo Guid, luego se crea un ciclo for para saber cuantos identificadores se van a generar, en la línea 3 se llama el método NewGuid de la estructura Guid para generar el valor y finalmente los agregamos al listbox. Al probar ejemplo veremos algo como:

Imagen2

Como ven es algo bastante sencillo, espero les sea de utilidad.

Descarga el ejemplo!

[Visual Basic] Operadores AndAlso y OrElse

Posted on

Hola a todos, este será un post bastante pequeño y sencillo, pero es una característica de Visual Basic que algunas se pasa por alto. Todos conocemos el uso del operador And y Or en Visual Basic, sin embargo existen dos operadores más que cumplen la misma función pero de una mejor manera, y tales operadores son AndAlso y OrElse.

Operador AndAlso

Evalúa la segunda condición solo si la primera es verdadera. Es decir, si tenemos una sentencia if como la siguiente:

   1:  If condición1 AndAlso condición2 Then
   2:      'Código
   3:  Else
   4:      '
   5:  End If

La condición2 será evaluada solo y solo si la condición1 se cumple. Si en dicho ejemplo se utilizara And la condición2 se evaluaría así la condición1 no se cumple.

Operador OrElse

Si la primera condición se cumple, no se realiza la validación de la segunda, utilizando un código semejante al anterior si tenemos:

   1:  If condición1 OrElse condición2 Then
   2:      'Código
   3:  Else
   4:      'Código
   5:  End If

Si la condición1 se cumple la condición2 ya no es evaluada. Si en el ejemplo anterior se utilizara el operador Or las condiciones siempre se evaluarían sin importar si la primera se cumple o no.

Espero les sea de utilidad !

[Visual Basic] Tipos nulos

Posted on

Hola a todos, desde ahora y siguiendo con el nombre del blog “Todo en Visual Basic.Net”, voy a ir subiendo post sobre características de Visual Basic (claro de jQuery y ASP.NET también), para que podamos ir conociendo un poco más sobre este extraordinario lenguaje.

En este post vamos a ver que son y como poder utilizar los nullable type o tipos nulos.

Un nullable type  es un tipo de dato que permite almacenar valores nothing, lo cual es bastante útil si trabajamos con bases de datos, ya que si alguno de los valores que traemos tiene el valor null, y si es asignado a una variable de un tipo de dato que no permite almacenar ese tipo de valores vamos a tener una excepción.

Ahora como hacemos para declarar un tipo de dato nullable?.. pues es muy fácil, y tenemos dos opciones:

   1:  Dim iValor as Integer?

o

   1:  Dim iValor As Nullable(Of Integer)

y listo, ahora la variable iValor puede recibir como valor nothing sin generar alguna excepción:

   1:  iValor = Nothing

Eso es todo, una característica bastante sencilla de utilizar.

Subir archivos con FileUpload

Posted on Actualizado enn

Una funcionalidad recurrente en un desarrollo web es la necesidad de permitirle al usuario cargar archivos, para esta tarea asp.net ofrece un control llamado FileUpload, este control abre una ventana en al cual el usuario selecciona el archivo, pero esto no es suficiente, también se debe disponer de un botón generalmente que permita realizar la subida de dicho archivo al servidor.

Un punto importante es que a diferencia de las aplicaciones de escritorio en donde el componente OpenFileDialog permitía filtrar los tipos de archivos a seleccionar con el FileUpload esto no es posible, el usuario podrá seleccionar el tipo de archivo que desee.

El punto anterior puede traernos bastantes problemas, para lo cual tenemos dos opciones (aconsejo utilizarlas ambas):

  1. Validar el tipo de archivo en el cliente.
  2. Validar el tipo de archivo en el servidor.

Vamos a revisar como realizar ambas validaciones, la interfaz algo sencilla pero que servirá para realizar el ejemplo es:

Tenemos dos grupos, el primero realizará validación en el servidor y el segundo en el cliente, para el ejemplo se va a permitir subir solo imágenes, para luego ser mostrada por pantalla.

1. Validación en el servidor:

El código para realizar la validación en el servidor es:

        Dim sExt As String = String.Empty
        Dim sName As String = String.Empty
 
        imgSubida.Width = 0
        imgSubida.Width = 0
        imgSubida.ImageUrl = ""
 
        If uploadFile.HasFile Then
            sName = uploadFile.FileName
            sExt = Path.GetExtension(sName)
 
            If ValidaExtension(sExt) Then
                uploadFile.SaveAs(MapPath("~/images/" & sName))
                imgSubida.Width = 300
                imgSubida.Width = 300
                imgSubida.ImageUrl = "/images/" & sName
                lblMensaje.Text = "Archivo cargado correctamente."
            Else
                lblMensaje.Text = "El archivo no es de tipo imagen."
            End If
        Else
            lblMensaje.Text = "Seleccione el archivo que desea subir."
        End If
    Private Function ValidaExtension(ByVal sExtension As String) As Boolean
        Select Case sExtension
            Case ".jpg", ".jpeg", ".png", ".gif", ".bmp"
                Return True
            Case Else
                Return False
        End Select
    End Function

Se declaran dos variables, una va a tener el nombre del archivo y la otra la extensión del archivo, luego con la propiedad booleana uploadFile.HasFile validamos que el control si tenga un archivo, obtenemos el nombre del archivo con uploadFile.FileName,este obtiene exclusivamente el nombre con la extensión del archivo, si usamos uploadFile.PostedFile.FileName obtenemos la ruta completa y finalmente la extensión se obtiene con la función GetExtension() de la clase Path que pertenece al espacio de nombres System.IO.

Luego con la función ValidaExtension() se valida que la extensión del archivo sea correcta, de ser así devuelve true de lo contrario false.

Si la validación anterior ha sido correcta, se hace uso del método SaveAs del FileUpload, y se guarda la imagen en la carpeta images de la estructura del sitio, y finalmente la imagen es cargada al control image.

2. Validación en el cliente:

El código para realizar la validación en el cliente es:

$(function () {
    $("#<% = btnSubir2.ClientID %>").click(function () {
        var file = document.getElementById('<% = uploadFile2.ClientID %>').value;
        if (file == null || file == '') {
            alert('Seleccione el archivo a subir.');
            return false;
        }
        //DEFINE UN ARRAY CON LAS EXTENSIONES DE ARCHIVOS VALIDAS
        var extArray = new Array(".jpg", ".jpeg", ".bmp", ".png", ".gif");
        //SE EXTRAE LA EXTENSION DEL ARCHIVO CON EL PUNTO INCLUIDP 
        var ext = file.slice(file.indexOf(".")).toLowerCase();
 
        //SE RECORRE EL ARRAY PARA VERIFICAR SI LA EXTENSSION DEL ARCHIVO ESTA DEFINIDA 
        //EN EL ARRAY QUE CONTIENE LAS EXTENSIONES VALIDAS
        for (var i = 0; i < extArray.length; i++) {
            if (extArray[i] == ext) {
                alert("El archivo SI es una imagen.");
                return true;
            }
        }
        alert("El archivo NO es una imagen");
        return false;
    })
})

Primero con jQuery manejamos el evento clic del botón btnSubir2, en la variable file traemos el valor que tiene el fileupload, esto para poder verificar que se haya seleccionado un archivo.

Se define un array con las extensiones permitidas de los archivos a subir, luego en la variable ext se guarde la extensión del archivo seleccionado (recuerda q se incluye el punto) y finalmente con un ciclo for se recorre el array para revisar si la extensión del archivo se encuentra en algún item del array definido anteriormente.

Un punto importante acá es que el control FileUpload no es totalmente compatible con el UpdatePanel, por lo cual se tendrá que hacer se otro control del cual hablaré en los próximos artículos, además veremos como utilizar los plugin de jQuery para realizar la subida de archivos.

Les dejo el código del ejemplo en VB y C#.

Ejemplo en VB !

Ejemplo en C# !

Thumbnail en Windows 7

Posted on Actualizado enn

Hola, siguiendo con esta serie de post sobre desarrollo para Windows 7, vamos a ver como podemos establecer thumbnails para nuestras aplicaciones, un thumbnail es la imagen que se muestra cuando ponemos el mouse sobre le icono de algún escritorio.
Si no establacemos uno personalizado por defecto se verá la ventana de la aplicación.
La idea aca es tener 8 imágenes diferentes, y al seleccionar alguna de las imágenes esta se convertira en el thumbnail de la aplicación.
La aplicación se verá algo así:
Asi cuando se cambie de selección la imágen el thumbnail tambien cambiara..ahora el poco código detrás…
Private Sub PictureBoxImage1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBoxImage1.Click,
PictureBoxImage2.Click,
PictureBoxImage3.Click,
PictureBoxImage4.Click,
PictureBoxImage5.Click,
PictureBoxImage6.Click,
PictureBoxImage7.Click,
PictureBoxImage8.Click
Dim oPicture As PictureBox
Call FondoBlanco()
oPicture = TryCast(sender, PictureBox)
If TypeOf (oPicture) Is PictureBox Then
oPicture.BackColor = Color.AliceBlue
End If

If ValidaSO() Then
Dim iLeft As Integer = 0
Dim iWidth As Integer = 0
iLeft = oPicture.Left + TabControl1.Left + GroupBox7.Left + TabPage4.Left
iWidth = oPicture.Top + TabControl1.Top + GroupBox7.Top + TabPage4.Top
Dim oRec As New Rectangle(iLeft, iWidth, oPicture.Width, oPicture.Height)
TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(Me.Handle, oRec)
Else
MsgBox(“Su sistema operativo no permite ejecutar las nuevas caracterisiticas de Windows 7, por favor actulize su sistema.”, MsgBoxStyle.Information, “Sistema no soportado”)
End If
End Sub
Se define un manejador para todos los eventos clic de los 8 diferetnes picturebox, declaramos un objeto de tipo picturebox, luego hacemos un cast al sender (sender digamos en resumen que es el objeto que realiza el evento) para obtner el picturebox que genero el evento y lo asignamos al picturebox creado; cambiamos el color de fondo del picture para poder ver visualmente la imágen seleccionada, luego debemos obtener el rectangulo que corresponde a dicha imagen o picturebox, para este caso declaramos dos variables (iLeft, iWidth) para poder tener la posición en x y en y respectivamente.
Ahora, para poder obterne la posición tanto en x como en y, usamos la siguiente lógica, cada control dentro del formulario tiene una posición en x y una y relativa al control que lo contiene, es decir, para el ejemplo la posición x del picture será en relación al groupbox que lo contiene, este groupbox a su vez la tendrá en relación al tabpage, este tabpage al tabcontrol y el tabcontrol al formulario, asi que vamos a sumar todos estos valores en x y en y para poder obtener la posición correcta.
Luego creamos un objeto de tipo rectangle el cual será definido por la posición y el tamaño del picturebox.
Dim oRec As New Rectangle(iLeft, iWidth, oPicture.Width, oPicture.Height)
Por último lo asignamos al tasbarmanager…
TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(Me.Handle, oRec)
Y listo.. como ven es algo sencillo, lo único (por lo menos para mi algo tedioso es obtener el rectangulo correcto para poder asignarlo como thumbnail…
Nos vemos en el siguiente post !

JumpList en Windows 7

Posted on Actualizado enn

Hola, de nuevo con Windows 7, ahora vamos a ver como podemos añardir accesos directos al jumplist de nuestra app, el jumplist resumiendo es la lista que se muestra cuando se da clic derecho sobre el icono de alguna aplicación.

Los pasos para poder agregar tareas al jumplist son los sigueintes:

1. Declarar una variable de tipo JumpList

Dim oJumpList As JumpList

2. Decirle que vamos a crear un nuevo jumplist (generalmente lo hago en el load)

oJumpList = JumpList.CreateJumpListForIndividualWindow(“OverlayIcon”, Me.Handle)

3. Ahora vamos a tener una interfaz con  cuatro opciones, las cuales van a hacer referencia a 4 carpetas especiales del disco, las cuales son:

  • Música
  • Documentos
  • Imágenes
  • Programas

La idea es que nuestro jumplist tenga accesos directos a estas 4 carpetas.

4. Para poder agregar un elemento al jumplist lo primero que hago es traer la ruta de la carpeta seleccionada:

Dim sRuta As String = String.Empty

sRuta = My.Computer.FileSystem.SpecialDirectories.MyMusic

5. Agregar esa ruta como tarea al jumplist, darle un título y establecerle un icono.

oJumpList.AddUserTasks(New JumpListLink(sRuta, “Mi Música”) With {.IconReference = New IconReference(Path.Combine(sFolder, “explorer.exe”), 0)})

6. Listo, es todo.

Ha sido un rápido ejemplo de como podemos agregar tareas al jumplist de nuestra aplicación, es realmente sencillo, al final la aplicación debe lucir algo así:

Espero sea de utilidad y por algunos post más seguiremos hablando sobre Windows 7…

Link al ejemplo !!

 

Utilizando el namespace My

Posted on Actualizado enn

Bueno, una de las grandes ventajas (a mi parecer) para todos aquellos que desarrollamos con visual basic.net es la posibilidad de poder usar el namespace my para algunas tareas comunes como acceder a la información del equipo, operacion de entrada y salida de archivos y capertas, acceso a puertos, entre otras.

Aunque es posible usarlo tambien con C# referenciando la libreria Microsoft.VisualBasic.dll para el lenguaje visua basic .net digamos que es nativo…

Esta vez no explicare todo el código, ya que el uso es realmente sencillo, además que podemos extender este namespace para agregarle nuevas funcionalidades, lo cual hare en un proximo post… por el momento solo comentar que el ejemplo obtengo información del sistema, realizo operaciones comunes con archivos como abrir, crear, copiar y eliminar un archivo y por último accedo al folder de música, se cargan las canciones en un listbox y tenemos dos botones uno para escuchar y el otro para detener la canción, lo único a tener en cuenta es que las canciones deben ser de tipo wav (en un proximo post veremos como hacer un reproductor de mp3 de una manera bastante fácil).

Sin más les dejo el ejemplo con una cancion en formato wav, solo deben copearla a la carpeta de música predefinida… espero que les sea de utilidad !!

Descarga del ejemplo !!

Leer pdf desde windows form

Posted on Actualizado enn

Hola a todos, bueno hoy quiero mostrarles como de una manera rápida podemos tener un lector de archivos pdf en nuestra aplicación windows, asi no necesitamos tener que lanzar un acrobat reader o algo parecido.

Bien, lo que vamos a hacer es acceder al componente COM del adobe reader y asi crear una instancia de el en nuestra aplicación…

Bueno manos a la obra, lo primero será crear un nuevo proyecto de tipo windows, asi el visual no generá un formulario por defecto… vamos a trabajar con este formulario, si desean pueden setear las propiedas como el tamaño, el título y demás características que deseen.

Ahora lo que vamos a hacer es en nuestro toolbox damos click derecho y luego seleccionamos elegir elementos…o en choose items si lo tienen en inglés…

luego se abrirá una ventana en la cual disponemos de varias pestañas, pero en este casp la que nos interesa en al pestaña que dice componentes COM (COM Components), y alli seleccionamos Adobe PDF Reader…

al seleccionar este componenete y dar clic en ok, debe aparecer en nuestro toolbox un objeto llamado Adobe Pdf Reader…

ahora solo debemos arrastrar nuestro nuevo objeto al formulario. Ahora lo que haremos sera darle la opción al usuario qiue pueda buscar un archivo y este sea cargado en el formulario, asi que ya han visto la interfaz (básica) que he diseñado, lo que voy a explicar será el code behind… como siempre en vb..

Primero instanciamos un nuevo objeto de tipo OpenFileDialog, este objeto nos permite hacer una búsqueda de archivos en nuestro equipo:

Dim oOpenFileDialog As New OpenFileDialog

Ahora en el load del formulario, vamos a limitar los tipos de archivo que podemos buscar estableciendo un valor para la propiedad filter de nuestro cuadro de diálogo, basicamente establecemos un nombre y le asociamos una extensión, en este caso .pdf:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oOpenFileDialog.Filter = “Archivos PDF (*.pdf) | *.pdf”
End Sub

Ahora en el boton de buscar archivo, lo que hacemos es establecer la propiedad filtername a vacio, abrir el cuadro de diálogo y si el usuario selecciona archivo y presiona ok entonces mostrar la ruta del archivo en el cuadro de texto:

Private Sub ButtonArchivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonArchivo.Click
oOpenFileDialog.FileName = String.Empty
If oOpenFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
TextBoxFile.Text = oOpenFileDialog.FileName
End If
End Sub

Bueno, ahora que ya tenemos la ruta del archivo, por fin vamos a cargar el archivo pdf en el formulario, lo único que debemos hacer el al componente COM asignarle el archivo pdf con la función LoadFile, la cual retorna un true si el cargue ha sido exitoso y false en caso contrario, en esta caso simplemente mostramos un mensaje informando si ocurrio un error o si no:

Private Sub ButtonCargar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCargar.Click
If ComPDF.LoadFile(TextBoxFile.Text) Then
MsgBox(“Archivo cargado con éxito”, MsgBoxStyle.Information, “Sistema”)
Else
MsgBox(“Ocurrió un error al cargar el archivo”, MsgBoxStyle.Information, “Sistema”)
End If
End Sub

Bueno y eso es todo, ya podemos ver nuestros pdf sin salir de nuestra aplicación.

Descarga el código de ejemplo !!

Nos vemos proximamente…