martes, 23 de noviembre de 2010

Silverlight Tip - Mostrar el Número de versión

Si estás desarrollando una aplicación en Silverlight y quieres mostrar el número de versión de tu aplicación, una vez tengas configurado el fichero AssemblyInfo.vb de tu proyecto, añade el siguiente código:
Dim FullName As String = Assembly.GetExecutingAssembly().FullName
Dim Name As AssemblyName = New AssemblyName(FullName)
Dim Version As System.Version = Name.Version

VersionNumber.Text = String.Format("Mi Programa v{0}.{1}.{2}", 
                                   Version.Major, 
                                   Version.Minor,
                                   Version.Build)

sábado, 13 de febrero de 2010

Silverlight: Convertir un nombre de color predefinido a SolidColorBrush

Si trabajas con Silverlight es posible que necesites utilizar nombre de colores ("Green","Black", "DarkGreen", etc.) para las propiedades relacionadas con colores. Si intentas hacer esto mismo desde código te encontrarás que no hay ninguna función que convierta el String a un objeto del tipo SolidColorBrush.

Googleando un poco he llegado al siguiente post: My Silverlight experiences: Color / SolidColorBrush object from color name in silverlight El código en si no me ha funcionado pero me ha dado la pista para crear la función siguiente:

        Public Function ConvertToSolidColorBrush(ByVal hexacolor As String) As SolidColorBrush

Dim s As String = String.Format("<SolidColorBrush xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' Color='{0}'></SolidColorBrush>", hexacolor)
Dim brush As SolidColorBrush = CType(Markup.XamlReader.Load(s), SolidColorBrush)
Return brush

End Function

Te será realmente útil si al cargar información de configuración.

martes, 9 de febrero de 2010

¿Cuál es mi IP pública?

El otro día estaba desarrollando un pequeño programa para actualizar un nombre de dominio que tengo en el proveedor de DNS gratuito de  No-IP y necesitaba saber mi IP pública. Buscando encontré que la página What Is My IP ofrece una página ASP que te ofrece esta información así que he creado la siguiente función:


Public Function WhatIsMyIP() As String

Dim WhatIsMyIPUrl As String = "http://whatismyip.com/automation/n09230945.asp"
Dim req As HttpWebRequest
Dim res As HttpWebResponse
Dim Stream As IO.Stream
Dim PublicIP As String = String.Empty
Dim sr As StreamReader

Try
req = WebRequest.Create(WhatIsMyIPUrl)
res = req.GetResponse()
Stream = res.GetResponseStream()
sr = New StreamReader(Stream)
PublicIP = sr.ReadToEnd()
sr.Dispose()
Catch ex As Exception

End Try

Return PublicIP

End Function

viernes, 5 de febrero de 2010

Métodos de extensión para VB.NET

¿Habéis utilizado alguna vez los Métodos de extensión? Es una de las novedades que incorporaba el ya viejo Visual Studio 2008 para VB.NET pero que te permite añadir funcionalidad a clases ya existentes sin necesidad de tener que usar herencia o polimorfismo. Imagínate que necesitas una función que "limpie" un String y sólo deje los números y elimine letras, signos de puntuación, etc. ¡La típica función para extraer números de matrículas y de NIF!
Para implementar dicha funcionalidad normalmente crearíamos una clase que tuviera este método y la iríamos instanciando donde la necesitáramos. Un paso más allá cogeríamos ese método y lo marcaríamos como Shared para tener así un método de clase y evitar así tener que crear la instancia de la clase para llamarlo.
Pues si creamos un método de extensión como este:
   1: Imports System.Runtime.CompilerServices
   2:  
   3: Module Extensions
   4:  
   5:     <Extension()> _
   6:     Public Function ExtraerNumeros(ByVal s As String) As String
   7:         Dim out As String = String.Empty
8: For Each c As Char In s
   9:             If Char.IsNumber(c) Then
10: out = String.Concat(out, c.ToString())
  11:             End If
12: Next
  13:         Return out
14: End Function
  15:  
  16: End Module

Podríamos utilizarlo de la siguiente manera:
1: Dim Numero As String = "98732394-Z".ExtraerNumeros()
Ahora cualquier String que tengáis en vuestra aplicación tendrá ese método como propio.

Nota: Si queréis crear un método de extensión que lo puedan utilizar todas las clases sólo tenéis que pasar como referencia un Object

Haciendo pruebas en Visual Studio 2008 no he conseguido extender un método contra el tipo Object.
Continuará ...