como hacer un text moneda?

14/10/2005 - 04:11 por Richard | Informe spam
Quisiera saber si alguno de ustedes han desarrollado un software donde
tengan que introducir datos enteros y 2 decimales ya que he probado con el
numericupdown y no funciona como deberia. Existie algun dll que pueda
utilizar free. Estoy programando en vb.net 2003.

Gracias de antemano.
RV

Preguntas similare

Leer las respuestas

#1 Carlos Gómez
14/10/2005 - 14:52 | Informe spam
Lo que quieres es sencillo pero trabajoso:

Primero debes capturar el evento KeyDown, y ahí evitar que el usuario
use letras, pero permitir que use numeros, el punto, o la coma (o
ambos), y las teclas de control (flecha arriba, abajo, derecha,
izquierda, delete...) además del signo menos

Por otro lado, en el evento validating debes comprobar que el resultado
es un
número (no vaya a ser que haya hecho uso de control-v y te pegue un
texto)

Además en el evento keyPress comprobar que si escribe el símbolo
menos (-) este se coloque al principio si no estaba, y si ya estaba,
quitarlo.

Tambien en KeyPress comprobar si escribe un punto o una coma el
caracter que muestre el TextBox sea el que tu deseas (en castellano la
coma, en inglés el punto...), y que por otro lado no haya ya hecho uso
antes, ya que si el textbox contiene un punto (o coma) no debe escribir
otro punto.

Además debe evitarse entradas del tipo ,03 ya que la correcta sería
0,03 o entradas del tipo 0000013,23 ya que la correcta seria 13,23 o
-,23 --> -0,23

En fin, alguna otra cosa se me abrá pasado, pero ya ves que el
proceso, aunque es sencillo tiene muchos detalles como por ejemplo que
teniendo esto:
-0,34 borre el cero y deje esto: -,23

y si ademas quieres que no tenga más de dos decimales pues te
enfrentas a otro grupo mas de comprobaciones

En fin, si tienes alguna duda, lo dices y te hecho una mano si puedo ;)
Respuesta Responder a este mensaje
#2 Lord Voldemort
14/10/2005 - 17:30 | Informe spam
yo respondi a tu pregunta que hicistes miles de veces..
pero no dijistes si funcionaba..
ahi tendrias un inicio mas lo que sugiere carlos...lo terminarias..

"Richard" wrote in message
news:%
Quisiera saber si alguno de ustedes han desarrollado un software donde
tengan que introducir datos enteros y 2 decimales ya que he probado con el
numericupdown y no funciona como deberia. Existie algun dll que pueda
utilizar free. Estoy programando en vb.net 2003.

Gracias de antemano.
RV

Respuesta Responder a este mensaje
#3 Richard
17/10/2005 - 01:06 | Informe spam
Gracias Lord. Lo que sucede es que no funcionó. Porque algo tan basico y
frecuentemente utilizado microsoft no saca ese control. Fijate que en visual
foxpro es nativo y sin programación.
Lo que quiero hacer es simple pero no entiendo porque hay que programarlo.
Ingresar por ejemplo 1,452.76 y cuando el usuario pulse el . el cursor se
desplace a los decimales.
Algun ejemplo funcional?
Saludos
"Lord Voldemort" <@@> escribió en el mensaje
news:%
yo respondi a tu pregunta que hicistes miles de veces..
pero no dijistes si funcionaba..
ahi tendrias un inicio mas lo que sugiere carlos...lo terminarias..

"Richard" wrote in message
news:%
Quisiera saber si alguno de ustedes han desarrollado un software donde
tengan que introducir datos enteros y 2 decimales ya que he probado con
el numericupdown y no funciona como deberia. Existie algun dll que pueda
utilizar free. Estoy programando en vb.net 2003.

Gracias de antemano.
RV





Respuesta Responder a este mensaje
#4 Richard
17/10/2005 - 01:07 | Informe spam
Gracias Carlos que que con un ejemplo funcional seria lo optimo. Sera que lo
tienes?
Saludos
RV
"Carlos Gómez" escribió en el mensaje
news:
Lo que quieres es sencillo pero trabajoso:

Primero debes capturar el evento KeyDown, y ahí evitar que el usuario
use letras, pero permitir que use numeros, el punto, o la coma (o
ambos), y las teclas de control (flecha arriba, abajo, derecha,
izquierda, delete...) además del signo menos

Por otro lado, en el evento validating debes comprobar que el resultado
es un
número (no vaya a ser que haya hecho uso de control-v y te pegue un
texto)

Además en el evento keyPress comprobar que si escribe el símbolo
menos (-) este se coloque al principio si no estaba, y si ya estaba,
quitarlo.

Tambien en KeyPress comprobar si escribe un punto o una coma el
caracter que muestre el TextBox sea el que tu deseas (en castellano la
coma, en inglés el punto...), y que por otro lado no haya ya hecho uso
antes, ya que si el textbox contiene un punto (o coma) no debe escribir
otro punto.

Además debe evitarse entradas del tipo ,03 ya que la correcta sería
0,03 o entradas del tipo 0000013,23 ya que la correcta seria 13,23 o
-,23 --> -0,23

En fin, alguna otra cosa se me abrá pasado, pero ya ves que el
proceso, aunque es sencillo tiene muchos detalles como por ejemplo que
teniendo esto:
-0,34 borre el cero y deje esto: -,23

y si ademas quieres que no tenga más de dos decimales pues te
enfrentas a otro grupo mas de comprobaciones

En fin, si tienes alguna duda, lo dices y te hecho una mano si puedo ;)
Respuesta Responder a este mensaje
#5 Carlos Gómez
17/10/2005 - 21:44 | Informe spam
Bueno, ahí tienes un pequeño ejemplo.
Creo que no tiene errores pero no lo he comprobado...
Espero que te sirva de ayuda

Option Explicit On
Option Strict On

Imports System.Text.RegularExpressions

Public Class TextBoxNumerico
Inherits System.Windows.Forms.TextBox

#Region " Variables "
Dim _NumeroDecimales As Integer = 2
Dim _ValorAlEntrar As String
#End Region

#Region " Propiedades "
Public Property NumeroDecimales() As Integer
Get
Return (_NumeroDecimales)
End Get
Set(ByVal Value As Integer)
If Value >= 0 Then
_NumeroDecimales = Value
End If
End Set
End Property
Public Overrides Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal Value As String)
If IsNumeric(Value) Then
MyBase.Text = Value
End If
End Set
End Property
#End Region

#Region " Contructor "
Sub New()
Me.Text = "0"
End Sub
#End Region

#Region " Eventos "
Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
If Not IsNumeric(Me.Text) Then
Me.Text = "0"
End If
_ValorAlEntrar = Me.Text
MyBase.OnEnter(e)
End Sub
Protected Overrides Sub OnKeyPress(ByVal e As
System.Windows.Forms.KeyPressEventArgs)
If Not (Char.IsControl(e.KeyChar) Or Char.IsDigit(e.KeyChar) Or
e.KeyChar = "-"c Or e.KeyChar = ","c Or e.KeyChar = "."c) Then
e.Handled = True
Else
If e.KeyChar = "."c Then
If NumeroDecimales > 0 Then
If Not ExisteCaracter(","c) Then
Call CambiarPuntoPorComa()
End If
End If
e.Handled = True
ElseIf e.KeyChar = ","c Then
If NumeroDecimales > 0 Then
If ExisteCaracter(","c) Then
e.Handled = True
End If
Else
e.Handled = True
End If
End If
If e.KeyChar = "-"c Then
Call PonerSignoMenos()
e.Handled = True
End If
End If
MyBase.OnKeyPress(e)
End Sub
Protected Overrides Sub OnValidating(ByVal e As
System.ComponentModel.CancelEventArgs)
If Not EsNumeroReal(Me.Text) Then
Me.Text = _ValorAlEntrar
End If
MyBase.OnValidating(e)
End Sub
Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)
If NumeroTotalDeDecimales() > NumeroDecimales Then
Call TruncarDecimales()
End If
MyBase.OnValidated(e)
End Sub
#End Region

#Region " Métodos Privados "
Private Function EsNumeroReal(ByVal cadena As String) As Boolean
Dim expresionRegular As New
Regex("\A(0|-?0,\d+|-?[1-9]\d*|-?[1-9]\d*,\d+)$")
EsNumeroReal = expresionRegular.IsMatch(cadena)
expresionRegular = Nothing
End Function
Private Sub CambiarPuntoPorComa()
Dim posicion As Integer = Me.SelectionStart
Me.Text = Me.Text.Substring(0, posicion) & "," &
Me.Text.Substring(posicion)
Me.SelectionStart = posicion + 1
End Sub
Private Function ExisteCaracter(ByVal caracter As Char) As Boolean
ExisteCaracter = Me.Text.IndexOf(caracter) > -1
End Function
Private Sub PonerSignoMenos()
Dim posicion As Integer = Me.SelectionStart
If ExisteCaracter("-"c) Then
Me.Text = Me.Text.Substring(1)
If posicion > 0 Then
Me.SelectionStart = posicion - 1
End If
Else
Me.Text = "-" & Me.Text
Me.SelectionStart = posicion + 1
End If
End Sub
Private Function NumeroTotalDeDecimales() As Integer
Dim posicionComa As Integer = Me.Text.IndexOf(","c)
If posicionComa > -1 Then
NumeroTotalDeDecimales = Me.Text.Substring(posicionComa + 1).Length
End If
End Function
Private Sub TruncarDecimales()
Dim posicionComa As Integer = Me.Text.IndexOf(","c)
Me.Text = Me.Text.Substring(0, posicionComa + 1) &
Me.Text.Substring(posicionComa + 1, NumeroDecimales)
End Sub
#End Region

End Class
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida