Problemas con punto decimal en vb.net t mysql
Resuelto/Cerrado
Consulta también:
- Problemas con punto decimal en vb.net t mysql
- Punto y coma en el teclado - Guide
- Como poner dos puntos en laptop - Guide
- Ver contraseña oculta con puntos android - Guide
- Eliminar duplicados mysql - Guide
- Punto de grados - Guide
12 respuestas
Bueno según veo tienen problemas con la configuración regional, pues yo uso la siguiente solución. Solo vb.net 2008, no se si servirá para otra versión.
Lo que tienen que hacer es decirle a su programa que cree su propia configuracion regional, es decir el programa que ustedes están diseñando usará la configuración regional que ustedes construyan y no la de windows.
ejemplo
importan el siguiente espacio de nombre
Imports System.Globalization
despues en el load del formulario inicial de la aplicacion escriben esto
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("es-CO")
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator = "."
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator = ","
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = ","
ustedes colocan ese codigo en el formulario inicial y de alli en adelante el programa tomara esa confiracion que ustedes realizaron.
ustedes veran si cambian el formato de la fecha o de los decimales o separador de miles solo cambienlo...
ya saben traten de leer y entender el codigo de esta manera no se les olvirará, no anden copiando y pegando
a mi me sirvio me imagino que a ustedes tambien
Saludos su servidor OD
Lo que tienen que hacer es decirle a su programa que cree su propia configuracion regional, es decir el programa que ustedes están diseñando usará la configuración regional que ustedes construyan y no la de windows.
ejemplo
importan el siguiente espacio de nombre
Imports System.Globalization
despues en el load del formulario inicial de la aplicacion escriben esto
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("es-CO")
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator = "."
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator = ","
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = ","
ustedes colocan ese codigo en el formulario inicial y de alli en adelante el programa tomara esa confiracion que ustedes realizaron.
ustedes veran si cambian el formato de la fecha o de los decimales o separador de miles solo cambienlo...
ya saben traten de leer y entender el codigo de esta manera no se les olvirará, no anden copiando y pegando
a mi me sirvio me imagino que a ustedes tambien
Saludos su servidor OD
Cambia la configuracion regional de la PC que usara tu programa. En donde dice Simbolo decimal, elige el punto, y donde dice separador de miles, pon una coma.
juliorg
Mensajes enviados
4
Fecha de inscripción
jueves, 14 de abril de 2016
Estatus
Miembro
Última intervención
jueves, 28 de abril de 2016
14 abr 2016 a las 08:08
14 abr 2016 a las 08:08
wow Esta solucion la buscaba muchisimo tiempo, muchisimas gracias.
Primero, suponiendo que caja de texto es TextBox1, en KeyPress haz lo siguiente, para que sólo se pueda poner un punto como separador decimal. No se permite separador de miles. Independiente de la configuración regional de tu PC.
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress
If e.KeyChar = Convert.ToChar(13) Then
Me.Button1.Focus()
ElseIf e.KeyChar = Convert.ToChar(8) Then ' se pulsó Retroceso
e.Handled = False
ElseIf (e.KeyChar = ","c) Then ' no permite la coma
e.Handled = True ' Handled = True, no permite; = False, si permite...
ElseIf (e.KeyChar = "."c) Then
Dim ctrl As TextBox = DirectCast(sender, TextBox)
If (ctrl.Text.IndexOf("."c) <> -1) Then ' sólo puede haber una coma
e.Handled = True
End If
ElseIf (e.KeyChar < "0"c Or e.KeyChar > "9"c) Then
' desechar los caracteres que no son dígitos
e.Handled = True
End If
End Sub
Luego, en el LostFocus haz lo siguiente: (Label1 es para expresar el resultado en el formulario)
Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TextBox1.LostFocus
Me.Label1.Visible = False
Dim objTextBox As TextBox = CType(sender, TextBox)
If objTextBox.Text = "" Then
Exit Sub
Else
If IsNumeric(objTextBox.Text) Then
' Si es la "," s/Config.Reg. en decimales, constata que ya haya "." y que no
' haya aún "," para reemplazar el "." por la "," como separador decimal
If laComa = True Then
If objTextBox.Text.IndexOf("."c) <> -1 Then
If objTextBox.Text.IndexOf(","c) = -1 Then
' Reemplaza el "." por la "," para adaptar a la Conf.Reg. actual
Dim TestString As String = objTextBox.Text
objTextBox.Text = Replace(TestString, "."c, ","c)
End If
End If
End If
' Hago el formateo con puntos y comas, s/conf.regional actual
Dim a As Decimal = CDec(objTextBox.Text)
objTextBox.Text = a.ToString("N2")
Else
MessageBox.Show("No es una expresión numérica válida.", My.Application.Info.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
objTextBox.Text = "" : objTextBox.Focus()
End If
End If
End Sub
Espero te sea útil a tí u otros colegas que tengan igual dudas. Suerte. Bernardo.
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress
If e.KeyChar = Convert.ToChar(13) Then
Me.Button1.Focus()
ElseIf e.KeyChar = Convert.ToChar(8) Then ' se pulsó Retroceso
e.Handled = False
ElseIf (e.KeyChar = ","c) Then ' no permite la coma
e.Handled = True ' Handled = True, no permite; = False, si permite...
ElseIf (e.KeyChar = "."c) Then
Dim ctrl As TextBox = DirectCast(sender, TextBox)
If (ctrl.Text.IndexOf("."c) <> -1) Then ' sólo puede haber una coma
e.Handled = True
End If
ElseIf (e.KeyChar < "0"c Or e.KeyChar > "9"c) Then
' desechar los caracteres que no son dígitos
e.Handled = True
End If
End Sub
Luego, en el LostFocus haz lo siguiente: (Label1 es para expresar el resultado en el formulario)
Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TextBox1.LostFocus
Me.Label1.Visible = False
Dim objTextBox As TextBox = CType(sender, TextBox)
If objTextBox.Text = "" Then
Exit Sub
Else
If IsNumeric(objTextBox.Text) Then
' Si es la "," s/Config.Reg. en decimales, constata que ya haya "." y que no
' haya aún "," para reemplazar el "." por la "," como separador decimal
If laComa = True Then
If objTextBox.Text.IndexOf("."c) <> -1 Then
If objTextBox.Text.IndexOf(","c) = -1 Then
' Reemplaza el "." por la "," para adaptar a la Conf.Reg. actual
Dim TestString As String = objTextBox.Text
objTextBox.Text = Replace(TestString, "."c, ","c)
End If
End If
End If
' Hago el formateo con puntos y comas, s/conf.regional actual
Dim a As Decimal = CDec(objTextBox.Text)
objTextBox.Text = a.ToString("N2")
Else
MessageBox.Show("No es una expresión numérica válida.", My.Application.Info.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
objTextBox.Text = "" : objTextBox.Focus()
End If
End If
End Sub
Espero te sea útil a tí u otros colegas que tengan igual dudas. Suerte. Bernardo.
Muchas Gracias!, genial tu aporte. Esto del punto por la coma me estaba matando. La gente no entiende que nuestro separador decimal es la coma y que los teclados son americanos, por eso es que traen el punto en el teclado numerico. Pues como sea, desde ya muchas gracias y ahora mis usuarios no se van a poder quejar por el punto del num pad. saludos!
Gracias!!!
Gracias!!!
¿No encontraste la respuesta que buscabas?
Haz una pregunta
en viual 6.0 el true dbinput 5.0 te soluciona poner tanto codigo
en visual .net existe el component one pero esta 1200 US$ tambien con true dbinput 8.0 pro
¿ Esto existe hace 10 años pero viene aparte del visual .net xq microsoft no ponen en sus controles
e true db input y te ahorran tanto dolor de cabaze ? o existe algo de no le permita realizar estos arreglos
en visual .net existe el component one pero esta 1200 US$ tambien con true dbinput 8.0 pro
¿ Esto existe hace 10 años pero viene aparte del visual .net xq microsoft no ponen en sus controles
e true db input y te ahorran tanto dolor de cabaze ? o existe algo de no le permita realizar estos arreglos
Tambien puedes agregar un <asp:Rangevalidator> o un <asp:Customvalidator> y mediante una expresion regular puedes evitar que se ingresen comas o puntos en el campo, ademas de texto y lo que se le ocurra al usuario.
Por ejemplo con la expresion \d\d/\d\d/\d\d\d\d verificas que una fecha se ingrese en el formato dia/mes/año
Por ejemplo con la expresion \d\d/\d\d/\d\d\d\d verificas que una fecha se ingrese en el formato dia/mes/año
8 dic 2010 a las 00:07
30 dic 2010 a las 16:41
31 ene 2011 a las 22:20
31 ene 2011 a las 22:27
12 may 2011 a las 15:05