Ver Mensaje Individual
  #150 (permalink)  
Antiguo 19/11/2008, 10:10
Avatar de Mickel
Mickel
 
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 22 años, 6 meses
Puntos: 7
Respuesta: FAQ´S del foro de Net

Aca dejo un objeto en VB para tener un control de texto que solo admita numeros en una WebForm...

Cita:
Imports System.Web
Imports System.ComponentModel
Imports System.Text
<DefaultProperty("Text"), System.Web.UI.ToolboxData("<{0}:decbox runat=server CssClass=cssDecimalBox></{0}:decbox>")> Public Class DecBox
Inherits System.Web.UI.WebControls.TextBox
'Modificado para agregar tres propiedades:
' IncluirValidacion(Boolean, que dice si se validara que el texto sea numerico o no)
' Decimales(Integer, solo se aplica cuando IncluirValidacion es True para formateo de Decimales)
' ValorPreDefinido(Decimal, valor default cuando IncluirValidacion es True)
'Esto lo pusimos en el onChange
'Y de paso le pusimos una imagen para la Toolbox. LMC - 200404
'Se Agrego Chequeo de Limites. LMC - 200511
'Ejemplo de Uso:
'
'<%@ Register TagPrefix="db" Namespace="DecBox" Assembly="DecBox" %>
'
'<db:decbox id="txtMonto" runat="server"></rsc:decbox>
'
'Por Codigo:
'txtMonto.IncluirValidacion=True
'txtMonto.Decimales=2
'txtMonto.ValorPreDefinido=0

Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
Dim str_JScript As String
MyBase.Attributes.Add("onkeypress", "javascript:TeclaDecimal();")
If Me._IncluirValidacion Then
str_JScript = "javascript:ChequearNumero(this," & Me._Decimales.ToString & "," & Me._ValorPreDefinido.ToString & ");"
MyBase.Attributes.Add("onchange", str_JScript)
End If
MyBase.Render(output)
End Sub

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
Dim str_enter As String = Environment.NewLine
Dim stb_OnKeyPress As New StringBuilder, stb_OnChangeV As New StringBuilder, stb_OnChangeR As New StringBuilder
Dim pg As System.Web.UI.Page
With stb_OnKeyPress
.Append("<script language='javascript'>")
.Append(str_enter)
.Append("function TeclaDecimal() {")
.Append(str_enter)
.Append("var sKey;")
.Append(str_enter)
.Append("sKey = String.fromCharCode(window.event.keyCode);")
.Append(str_enter)
.Append("if (!((sKey >= '0' && sKey <= '9') || (sKey == '.'))) { window.event.keyCode = 0; } ")
.Append(str_enter)
.Append("}")
.Append(str_enter)
.Append("</script>")
End With
With stb_OnChangeV
.Append("<script language='javascript'>")
.Append(str_enter)
.Append("function ChequearNumero(fieldName, decimals, mdefault) {")
.Append(str_enter)
.Append(" if (isNaN(fieldName.value)) {")
.Append(str_enter)
.Append(" fieldName.value=mdefault;")
.Append(str_enter)
.Append(" } else {")
.Append(str_enter)
.Append(" timeshundred = parseFloat(fieldName.value * Math.pow(10, decimals));")
.Append(str_enter)
.Append(" integervalue = parseInt(parseFloat(fieldName.value) * Math.pow(10, decimals));")
.Append(str_enter)
.Append(" if (timeshundred != integervalue) {")
.Append(str_enter)
.Append(" fieldName.value=mdefault;")
.Append(str_enter)
.Append(" }")
.Append(str_enter)
.Append("}")
.Append(str_enter)
.Append("</script>")
End With
pg = CType(HttpContext.Current.Handler, System.Web.UI.Page)
If Not pg.ClientScript.IsClientScriptBlockRegistered("Dec BoxKP") Then pg.ClientScript.RegisterStartupScript(pg.GetType() , "DecBoxKP", stb_OnKeyPress.ToString)
If Not pg.ClientScript.IsClientScriptBlockRegistered("Dec BoxOCV") Then
If Me._IncluirValidacion Then pg.ClientScript.RegisterStartupScript(pg.GetType() , "DecBoxOCV", stb_OnChangeV.ToString)
End If
End Sub

#Region "Private Members"
Private _IncluirValidacion As Boolean = False
Private _Decimales As Int32 = 0
Private _ValorPreDefinido As Double = 0
#End Region

#Region "Properties"
'Si TRUE, cualquier valor no numerico se reemplazara con ValorPreDefinido
Public Property IncluirValidacion() As Boolean
Get
Return Me._IncluirValidacion
End Get
Set(ByVal Value As Boolean)
Me._IncluirValidacion = Value
End Set
End Property

'Numero de decimales aceptados como maximo cuando IncluirValidacion=TRUE
Public Property Decimales() As Int32
Get
Return Me._Decimales
End Get
Set(ByVal Value As Int32)
Me._Decimales = Value
End Set
End Property

'Valor que reemplazara valores no numericos cuando IncluirValidacion=TRUE
Public Property ValorPreDefinido() As Double
Get
Return Me._ValorPreDefinido
End Get
Set(ByVal Value As Double)
Me._ValorPreDefinido = Value
End Set
End Property
#End Region
End Class
__________________
No tengo firma ahora... :(