formato de numeros.... cultureinfo

10/02/2007 - 01:36 por Gastoncito | Informe spam
Hola,

he realizado una aplicacion comercial... que utiliza el punto "." como
separador de miles...
y la coma "," como separador de decimales esto es lo correcto en mi
pais

pero en la empresa donde lo estoy instalando... hay una aplicacion que
utiliza al revès lo separadores...
es decir. punto "." para decimales y coma "," para miles...

lamentablemente los programadores de esta aplicacion dicen que no pueden
modificarla...

por lo tanto debo hacerlo en la mìa, como puedo hacer para que...
aunque en la configuracion regional estè punto para decimales... y coma para
miles... yo en mi aplicacion lo utilices al revès???
he escuchado algo de cultureinfo o algo asì??
serà posible?

muchas gracias

Preguntas similare

Leer las respuestas

#1 Eduardo
10/02/2007 - 01:42 | Informe spam
Gastoncito

If My.Application.Culture.NumberFormat.CurrencyDecimalSeparator = "," Then

variable = variable.Replace(".", ",")

Else

variable = variable.Replace(",", ".")

End If

De esta forma si tipean con coma y es de punto lo cambia o vicebersa

Espero te sirva

Eduardo






"Gastoncito" escribió en el mensaje
news:%
Hola,

he realizado una aplicacion comercial... que utiliza el punto "." como
separador de miles...
y la coma "," como separador de decimales esto es lo correcto en mi
pais

pero en la empresa donde lo estoy instalando... hay una aplicacion que
utiliza al revès lo separadores...
es decir. punto "." para decimales y coma "," para miles...

lamentablemente los programadores de esta aplicacion dicen que no pueden
modificarla...

por lo tanto debo hacerlo en la mìa, como puedo hacer para que...
aunque en la configuracion regional estè punto para decimales... y coma
para
miles... yo en mi aplicacion lo utilices al revès???
he escuchado algo de cultureinfo o algo asì??
serà posible?

muchas gracias

Respuesta Responder a este mensaje
#2 Gastoncito
10/02/2007 - 02:36 | Informe spam
he colocado esto en la sub main donde arranca la aplicacion... funciona
bien.. pero no se si serà correcto

System.Threading.Thread.CurrentThread.CurrentCulture = New
Globalization.CultureInfo("es-AR")



"Eduardo" escribió en el mensaje
news:%
Gastoncito

If My.Application.Culture.NumberFormat.CurrencyDecimalSeparator = "," Then

variable = variable.Replace(".", ",")

Else

variable = variable.Replace(",", ".")

End If

De esta forma si tipean con coma y es de punto lo cambia o vicebersa

Espero te sirva

Eduardo






"Gastoncito" escribió en el mensaje
news:%
Hola,

he realizado una aplicacion comercial... que utiliza el punto "." como
separador de miles...
y la coma "," como separador de decimales esto es lo correcto en mi
pais

pero en la empresa donde lo estoy instalando... hay una aplicacion que
utiliza al revès lo separadores...
es decir. punto "." para decimales y coma "," para miles...

lamentablemente los programadores de esta aplicacion dicen que no pueden
modificarla...

por lo tanto debo hacerlo en la mìa, como puedo hacer para que...
aunque en la configuracion regional estè punto para decimales... y coma
para
miles... yo en mi aplicacion lo utilices al revès???
he escuchado algo de cultureinfo o algo asì??
serà posible?

muchas gracias






Respuesta Responder a este mensaje
#3 Eduardo
10/02/2007 - 13:22 | Informe spam
Sinceramente Gastoncito no te se decir me supera, yo coloco esa pregunta en
el evento validating del control que necesito y si funciona
Por favor alguna persona del foro que que pueda dar una mano a su pregutna?
Mucha Suerte
Eduardo.

"Gastoncito" escribió en el mensaje
news:
he colocado esto en la sub main donde arranca la aplicacion... funciona
bien.. pero no se si serà correcto

System.Threading.Thread.CurrentThread.CurrentCulture = New
Globalization.CultureInfo("es-AR")



"Eduardo" escribió en el mensaje
news:%
Gastoncito

If My.Application.Culture.NumberFormat.CurrencyDecimalSeparator = ","
Then

variable = variable.Replace(".", ",")

Else

variable = variable.Replace(",", ".")

End If

De esta forma si tipean con coma y es de punto lo cambia o vicebersa

Espero te sirva

Eduardo






"Gastoncito" escribió en el mensaje
news:%
Hola,

he realizado una aplicacion comercial... que utiliza el punto "." como
separador de miles...
y la coma "," como separador de decimales esto es lo correcto en mi
pais

pero en la empresa donde lo estoy instalando... hay una aplicacion que
utiliza al revès lo separadores...
es decir. punto "." para decimales y coma "," para miles...

lamentablemente los programadores de esta aplicacion dicen que no pueden
modificarla...

por lo tanto debo hacerlo en la mìa, como puedo hacer para que...
aunque en la configuracion regional estè punto para decimales... y coma
para
miles... yo en mi aplicacion lo utilices al revès???
he escuchado algo de cultureinfo o algo asì??
serà posible?

muchas gracias










Respuesta Responder a este mensaje
#4 SoftJaén
10/02/2007 - 13:37 | Informe spam
"Gastoncito" escribió:

he realizado una aplicacion comercial... que utiliza el punto "." como
separador de miles...
y la coma "," como separador de decimales esto es lo correcto en mi
pais

como puedo hacer para que... aunque en la configuracion regional estè
punto para decimales... y coma para miles... yo en mi aplicacion lo
utilices al revès???



Hola:

Nunca me cansaré de repetir que nuestra aplicación SIEMPRE se debe de
adaptar a la configuración regional que el usuario tenga establecida, y
nunca al contrario. Pero ello no significa que tengamos que distribuir un
archivo ejecutable para cada país que utilice un símbolo de separador
decimal diferente al de otro país. Por lo tanto, sólo nos queda la
posibilidad de LEER el carácter que el usuario tiene establecido y actuar en
consecuencia.

Si en tu formulario tienes el típico cuadro de texto para introducir
números, lo primero que tienes que hacer es detectar si se ha pulsado un
carácter que puede usarse como separador decimal, como bien puede ser el
punto o la coma. Para ello, guardarías en una variable Boolean (que deberás
tener declarada a nivel del formulario) el resultado de la tecla pulsada,
siendo el valor True si el usuario ha pulsado el punto o la coma. Y esto lo
detectarías en el evento «KeyDown» del control TextBox, ejecutando lo
siguiente:

' Variable a nivel del formulario
'
Private isDecimal As Boolean


Private Sub TextBox1_KeyDown( ... ) Handles TextBox1.KeyDown

If e.KeyCode = Keys.Decimal Or _
e.KeyCode = Keys.Oemcomma Or _
e.KeyCode = Keys.OemPeriod Then

' Si se ha pulsado uno de los tres caracteres anteriores, dicho
' carácter actuará como separador decimal del número.
'
isDecimal = True

Else

IsDecimal = False

End If

End Sub

Ahora, en el evento «KeyPress» del control de texto, detectarías que tecla
ha pulsado el usuario. Pero como por regla general, en el formulario se
suelen tener varios controles de texto para escribir cifras numéricas, no
vamos a repetir el mismo código en todos los eventos «KeyPress» de los
controles TextBox, por lo que para ello, habilitaremos un procedimiento
genérico, más o menos como el que indico a continuación:

Private Sub TeclaPresionada( _
ByRef sender As Object, _
ByRef e As System.Windows.Forms.KeyPressEventArgs, _
ByRef oTextBox As TextBox, _
ByVal isDecimal As Boolean)

' Caracter separador decimal existente actualmente
' en la configuración regional de windows.
'
Dim separadorDecimal As String = _
Threading.Thread.CurrentThread. _
CurrentCulture.NumberFormat.NumberDecimalSeparator

If isDecimal Then
' Si en el control hay ya escrito un separador decimal,
' deshechamos insertar otro separador más.
'
If DirectCast(sender, TextBox).Text.IndexOf(separadorDecimal) >= 0 Then
e.Handled = True
Return
End If

' Insertamos el separador decimal.
'
DirectCast(sender, TextBox).SelectedText = separadorDecimal
e.Handled = True

ElseIf Convert.ToInt32(e.KeyChar) = 8 Then
' Se ha pulsado la tecla retroceso
ElseIf e.KeyChar = "-"c Then

' Únicamente si no está seleccionado el texto del control
If oTextBox.SelectionLength = 0 Then

' Solo permito el signo menos si aparece en primera posición
If oTextBox.SelectionStart <> 0 Then e.Handled = True

' Si en el control hay ya escrito un signo menos,
' deshechamos todos los que posteriormente se escriban
If DirectCast(sender, TextBox).Text.IndexOf("-") >= 0 Then
e.Handled = True
End If

End If

ElseIf Not (Char.IsDigit(e.KeyChar)) Then
' No se ha pulsado un dígito.
e.Handled = True

End If

End Sub

Para llamar al procedimiento «TeclaPresionada», en el evento «KeyPress» del
control de texto, ejecutarías lo siguiente:

Private Sub TextBox1_KeyPress( ... ) Handles TextBox1.KeyPress

TeclaPresionada(sender, e, TextBox1, isDecimal)

End Sub

Como tendrás oportunidad de comprobar, ésta es la forma correcta de actuar
nuestro código ante el posible símbolo separador decimal que el usuario de
nuestra aplicación tiene establecido en la configuración regional de
Windows. ¿Que tiene el símbolo de la coma? Aparecerá la coma. ¿Que tiene
otro carácter? Pues aparecerá ese otro carácter.

Al procedimiento «TeclaPresionada» solamente lo llamarán aquellos cuadros de
texto donde únicamente se permite escribir números, bien naturales o
decimales.

Por supuesto, dicho procedimiento se puede mejorar, pero eso ya lo dejo en
tus manos, o en la de otros usuarios del grupo de noticias que deseeen
implementarlo en sus propios proyectos. :-)

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida