Por Jorge Gómez M.
Contenido
1. Introducción
2. Configuración Regional de Aplicaciones
3. Configuración Regional de Procesos
4. Conclusión
1. Introducción
El manejo de la configuración regional en las aplicaciones siempre es un problema cuando tenemos varias aplicaciones instaladas que utilizan distintos formatos o modifican el registro a través de un número de API. Para ello .NET ha implementado la configuración por aplicación o proceso, lo cual facilita la personalización de nuestras aplicaciones.
2. Configuración Regional de Aplicaciones
Al desarrollar aplicaciones siempre tenemos que tener en cuenta el formato de fechas o números al cual nuestro usuario está acostumbrado (Ver Figura 1), ya que si forzamos o cambiamos una configuración regional, podríamos afectar su trabajo diario ya sea con planillas de Microsoft Excel o con otras aplicaciones existentes.
Figura 1. Volver al texto.
Para solucionar estos problemas, .NET ha implementado una solución sencilla que permite manejar una configuración regional independiente (sin afectar a otras aplicaciones); para ello utilizaremos el espacio de nombres Imports System.Globalization. Este espacio de nombres contiene varias clases que permiten manejar la información regional; a continuación revisaremos un ejemplo aplicando estos conceptos:
Dim oldDecimalSeparator As String = _ Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
Dim forceDotCulture As CultureInfo
forceDotCulture = Application.CurrentCulture.Clone()
forceDotCulture.NumberFormat.NumberDecimalSeparator = "."
forceDotCulture.NumberFormat.NumberGroupSeparator = ","
Application.CurrentCulture = forceDotCulture
Si agregamos este código a nuestra aplicación (load) funcionará "." como separador decimal y "," como separador de miles.
Aplicación de ejemplo:
Ingresamos un monto y presionamos Convertir donde nos muestra el mismo monto pero con formato aplicado (Ver Figura 2):
Figura 2. Volver al texto.
Luego invertimos los separadores y presionamos el botón Cambiar, y luego Convertir (Ver Figura 3):
Figura 3. Volver al texto.
A continuación se muestra el código de la aplicación:
Imports System.Globalization
Public Class frmConfiguracionRegional
Inherits System.Windows.Forms.Form
Dim Cifra As Double
Dim MiCultura As CultureInfo
Dim MiFormato As NumberFormatInfo = New _ CultureInfo(MiCultura.CurrentCulture.ToString(), _
False).NumberFormat
Private Sub cmdConvertir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
cmdConvertir.Click
Cifra = CDbl(txtMonto.Text)
lblFormat.Text = Format(Cifra, "#,##0.00")
End Sub
Private Sub frmConfiguracionRegional_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
MyBase.Load
End Sub
Private Sub cmdChange_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
cmdChange.Click
Dim oldDecimalSeparator As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
If Not oldDecimalSeparator = txtDecimales.Text Then
Dim forceDotCulture As CultureInfo
forceDotCulture = Application.CurrentCulture.Clone()
forceDotCulture.NumberFormat.NumberDecimalSeparator = _ txtDecimales.Text
forceDotCulture.NumberFormat.NumberGroupSeparator = _ txtMiles.Text
Application.CurrentCulture = forceDotCulture
End If
End Sub
End Class
3. Configuración Regional de Procesos
Además de lograr configurar aplicaciones, también podemos configurar procesos o aplicaciones sin interfaz; para revisar un ejemplo tomaremos un proyecto tipo servicio Windows (Ver Figura 4):
Figura 4. Volver al texto.
Este tipo de proyecto no tiene interfaz gráfica pero sí necesita utilizar una configuración regional bien definida para realizar cálculos con tipos de datos numéricos y diferencias de fechas.
Definiremos el mismo espacio de nombres anterior; a continuación mostraremos las clases que debemos utilizar:
forceDotCulture = mWorker.CurrentCulture.Clone()
forceDotCulture.NumberFormat.NumberDecimalSeparator = "."
forceDotCulture.NumberFormat.NumberGroupSeparator = ","
forceDotCulture.NumberFormat.CurrencyDecimalSeparator = "."
forceDotCulture.NumberFormat.CurrencyGroupSeparator = ","
forceDotCulture.DateTimeFormat.DateSeparator = "-"
forceDotCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"
mWorker.CurrentCulture = forceDotCulture
Con este código inserto al arrancar el servicio trabajaremos con el formato indicado por nosotros. La variable mWorker es la que utilizamos como proceso o hilo.
Private mWorker As Thread = Nothing
Protected Overrides Sub OnStart(ByVal args() As String)
Try
Dim start As ThreadStart = New ThreadStart(AddressOf Working)
mWorker = New Thread(start)
mWorker.Start()
Catch obug As Exception
LogEvent(obug.Message)
Throw obug
End Try
End Sub
4. Conclusión
Si revisamos el código necesario para poder personalizar nuestras aplicaciones o procesos nos daremos cuenta que no es un cambio significativo y tampoco nos tomara mucho tiempo, pero es una solución completa que nos aliviará muchos dolores de cabeza al implementar una aplicación.
Jorge Gómez M. se desempeña como Jefe de Proyectos, liderando proyectos de desarrollo en .net 2003 y 2005, y cuenta con 10 años de experiencia en el desarrollo e implementación de software en diversos ámbitos y negocios de Chile y Latinoamérica. Es Analista de Sistemas y actualmente está cursando la Ingeniería en Informática en la Universidad Internacional Sek.