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 Updated on

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 Updated on

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 !