Ver Mensaje Individual
  #11 (permalink)  
Antiguo 23/04/2007, 03:10
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 2 meses
Puntos: 4
Re: Control compuesto personalizado

Gracias xknown por tus respuestas. De momento no me está generando ningún conflicto repetir el código Javascript cuando inserto más de un control en una misma página.

El artículo de Microsoft parece útil, aunque no lo he leido entero (me cuesta un poquito más entender las cosas en inglés, je je). No obstante he optado por algo más radical para acceder a los propiedades del cuadro de texto, tanto en tiempo de edición como de ejecución, que es hacer que el cuadro de texto se convierta como tal en una propiedad pública accesibel y modificable. De manera que no tengo que tener en cuenta todas las propiedades del cuadro de texto para posibilitar su acceso posterior.

Esta es la n-ésima modificación (y las que vendrán , tío pesao):
Código:
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class controlCPProvincia
    : Inherits Control : Implements INamingContainer

    Private IDTxt As String = "TxtCP"

    <Browsable(True), _
    Category("Controles secundarios"), _
    Description("Cuadro de texto para la introducción del código postal")> _
    Public ReadOnly Property CuadroTexto() As TextBox
        Get
            Return CType(Me.FindControl(IDTxt), TextBox)
        End Get
    End Property

    Protected Overrides Sub CreateChildControls()
        Dim txt As New TextBox
        txt.MaxLength = "5"
        txt.Columns = "5"
        txt.ID = IDTxt
        Dim lbl As New Label
        lbl.ID = "lbl" & IDTxt
        'Script con vectores*****
        Dim sbScript As New System.Text.StringBuilder
        sbScript.Append("<script language=javascript>" & vbCrLf)
        sbScript.Append("var arrProvincias = new Array(" & _
                        "'&Aacute;lava','Albacete','Alicante','Almer&iacute;a'," & _
                        "'&Aacute;vila','Badajoz','Baleares','Barcelona'," & _
                        "'Burgos','C&aacute;ceres','C&aacute;diz','Castell&oacute;n'," & _
                        "'Ciudad Real','C&oacute;rdoba','Coru&ntilde;a','Cuenca'," & _
                        "'Gerona','Granada','Guadalajara','Guip&uacute;zcoa'," & _
                        "'Huelva','Huesca','Ja&eacute;n','Le&oacute;n'," & _
                        "'L&eacute;rida','La Rioja','Lugo','Madrid'," & _
                        "'M&aacute;laga','Murcia','Navarra','Orense'," & _
                        "'Asturias','Palencia','Las Palmas','Pontevedra'," & _
                        "'Salamanca','Santa Cruz de Tenerife','Cantabria','Segovia'," & _
                        "'Sevilla','Soria','Tarragona','Teruel'," & _
                        "'Toledo','Valencia','Valladolid','Vizcaya'," & _
                        "'Zamora','Zaragoza','Ceuta','Melilla');" & vbCrLf)
        sbScript.Append("var arrCodigos = new Array('01','02','03','04','05','06','07','08','09','10'," & _
                                                    "'11','12','13','14','15','16','17','18','19','20'," & _
                                                    "'21','22','23','24','25','26','27','28','29','30'," & _
                                                    "'31','32','33','34','35','36','37','38','39','40'," & _
                                                    "'41','42','43','44','45','46','47','48','49','50'," & _
                                                    "'51','52');" & vbCrLf)
        sbScript.Append("function provinciaCP(txt,lbl) {" & vbCrLf)
        sbScript.Append("var cp = String(txt).substring(0,2);" & vbCrLf)
        sbScript.Append("var ind, pos;" & vbCrLf)
        sbScript.Append("for(ind=0; ind<arrCodigos.length; ind++)" & vbCrLf)
        sbScript.Append("{" & vbCrLf)
        sbScript.Append("if (arrCodigos[ind] == cp)" & vbCrLf)
        sbScript.Append("break;" & vbCrLf)
        sbScript.Append("}" & vbCrLf)
        sbScript.Append("pos = (ind < arrCodigos.length)? ind : -1;" & vbCrLf)
        sbScript.Append("if((arrProvincias[pos] != undefined) && (txt.length == 5))" & vbCrLf)
        sbScript.Append("{document.getElementById(lbl).innerHTML = arrProvincias[pos];}" & vbCrLf)
        sbScript.Append("else {document.getElementById(lbl).innerHTML = 'Provincia no identificada';}" & vbCrLf)
        sbScript.Append("}" & vbCrLf)
        sbScript.Append(vbCrLf)
        sbScript.Append("function soloNum(evt) {" & vbCrLf)
        sbScript.Append("var nav4 = window.Event ? true : false;" & vbCrLf)
        sbScript.Append("var key = nav4 ? evt.which : evt.keyCode;" & vbCrLf)
        sbScript.Append("return (key <= 13 || (key >= 48 && key <= 57) || key == 44);" & vbCrLf)
        sbScript.Append("}" & vbCrLf)
        sbScript.Append("</script>" & vbCrLf)
        Me.Controls.Add(New LiteralControl(sbScript.ToString))
        '************************

        Me.Controls.Add(txt)
        Me.Controls.Add(New LiteralControl("&nbsp;"))
        Me.Controls.Add(lbl)
        txt.Attributes.Add("onChange", "provinciaCP(this.value,'" & lbl.ClientID & "');")
        txt.Attributes.Add("OnKeyPress", "return soloNum(event)")
        Me.Controls.Add(New LiteralControl("<script>provinciaCP(document.getElementById('" & txt.ClientID & "').value,'" & lbl.ClientID & "');</script>"))
    End Sub

End Class
Gracias de nuevo por las respuestas. Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!