Gustavo's profileGustavo BonanseaBlogLists Tools Help
    September 02

    Cómo extender webcontrols en ASP.Net

    En este simple ejemplo vamos a ver cómo puede extenderse un control web para agregarle cualquier funcionalidad que creamos conveniente. Extenderemos un Textbox web (System.Web.UI.WebControls.TextBox) para agregarle la funcionalidad de que pueda cambiar de estilo cuando pasamos con el mouse encima del mismo.

    Para comenzar creamos un proyecto del tipo "Web Control Library", luego agregamos una clase que contendrá nuestro control heredado, al cual yo he llamado ExTextbox.

    Código del Control:

    Imports System.ComponentModel

    Imports System.Text

    Imports System.Web.UI

     

    '''---------------------------------------------------------------

    ''' <summary>

    ''' Prefijo que tendra el control cuando sea agregado a una pagina web

    ''' </summary>

    '''---------------------------------------------------------------

    <Assembly: TagPrefix("gb.Web.Controls", "gb")>

     

    Namespace gb.Web.Controls

     

       '''-----------------------------------------------------------------------------

       ''' Project          : Prestamos

       ''' Class            : ExTextbox

       '''

       '''-----------------------------------------------------------------------------

       ''' <summary>

       ''' TextBox Extendido

       ''' </summary>

       ''' <remarks></remarks>

       ''' <history>

       '''      [gbonansea]       02/09/2005  Created

       ''' </history>

       '''-----------------------------------------------------------------------------

       Public Class ExTextbox

          Inherits System.Web.UI.WebControls.TextBox

     

          '''-----------------------------------------------------------------------------

          ''' <summary>

          ''' Indica la clase que utiliza el control para renderizarse cuando el mouse

          ''' se encuentra sobre el control

          ''' </summary>

          '''-----------------------------------------------------------------------------

          Protected _CssClassOver As String

     

     

          '''-----------------------------------------------------------------------------

          ''' <summary>

          ''' Indica la clase que utiliza el control para renderizarse cuando el mouse

          ''' se encuentra sobre el control

          ''' </summary>

          ''' <value></value>

          ''' <remarks></remarks>

          ''' <history>

          '''   [gbonansea]       02/09/2005  Created

          ''' </history>

          '''-----------------------------------------------------------------------------

          <Browsable(True), _

          Category("Appearance"), _

          Description("Style to apply when mouse over event is raised"), _

          DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _

          Public Property CssClassOver() As String

             Get

                Return _CssClassOver

             End Get

             Set(ByVal Value As String)

                _CssClassOver = Value

             End Set

          End Property

     

          '''-----------------------------------------------------------------------------

          ''' <summary>

          ''' Load event

          ''' </summary>

          ''' <param name="e"></param>

          ''' <remarks></remarks>

          ''' <history>

          '''   [gbonansea]       02/09/2005  Created

          ''' </history>

          '''-----------------------------------------------------------------------------

          Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

             Dim OnMouseOverScriptBuilder As New StringBuilder

     

             'Llamado a la funcion base

             MyBase.OnLoad(e)

     

             'Registro el evento para cambiar el estilo cuando el mouse se encuentra sobre

             'el control

             Me.Attributes.Add("onmouseover", Me.ID & "_onmouseover();")

             Me.Attributes.Add("onmouseout", Me.ID & "_onmouseout();")

     

             'construyo el script

             With OnMouseOverScriptBuilder

                .Append("<script language='javascript'>")

                'OnMouseOver

                .Append(vbNewLine)

                .Append("   function ")

                .Append(Me.ID)

                .Append("_onmouseover() { document.getElementById('")

                .Append(Me.ID)

                .Append("').className = '")

                .Append(Me.CssClassOver)

                .Append("'; }")

     

                'OnMouseOut

                .Append(vbNewLine)

                .Append("   function ")

                .Append(Me.ID)

                .Append("_onmouseout() { document.getElementById('")

                .Append(Me.ID)

                .Append("').className = '")

                .Append(Me.CssClass)

                .Append("'; }")

     

                .Append("</script>")

             End With

     

             'Registro el evento en la pagina

             Me.Page.RegisterClientScriptBlock(Me.ID & "ClientSideEvents", OnMouseOverScriptBuilder.ToString())

          End Sub

       End Class

     

    End Namespace

     

     

    Algunas consideraciones:

    Atributo: TagPrefix

     El atributo TagPrefix nos define el prefijo que va a tener el control que creemos. Por ejemplo todos los controles por defecto de ASP.Net tiene el prefijo "asp".

    Atributos: Browsable, Category, Description, DesignerSerializationVisibility

    Son atributos que indican como se va a comportar la propiedad en tiempo de diseño.

    Me.Attributes.Add

    De esta forma pueden ser agregados atributos que se van a escribir en el HTML resultado del renderizado del control. En este caso agregamos controladores a los eventos "onmouseover" y "onmouseout"

    Page.RegisterClientScriptBlock

    Se utiliza para registrar un bloque de código script en la página. En este ejemplo lo usamos para registrar el bloque con las funciones en javascript que controlan el comportamiento del control en el browser del cliente

    Resultado:

    Aspx:

    <gb:ExTextbox id="txtSolicitud" runat="server" CssClass="Value" ReadOnly="True" CssClassOver="ValueOver"></gb:ExTextbox>

    HTML:

    <script language='javascript'

       function txtTipoSolicitud_onmouseover() { document.getElementById('txtTipoSolicitud').className = 'ValueOver'; } 

       function txtTipoSolicitud_onmouseout() { document.getElementById('txtTipoSolicitud').className = 'Value'; }

    </script< /FONT > >

    <input name="txtSolicitud" type="text" readonly="readonly" id="txtSolicitud" class="Value" onmouseover="txtSolicitud_onmouseover();" onmouseout="txtSolicitud_onmouseout();" />

     GB

    Comments (9)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Picture of Anonymous
    Gustavo_Bonansea wrote:
    Me parece muy bien capocha, vaya por esas estrellas.
    Sept. 7
    Picture of Anonymous
    Ppino wrote:
    ??? !!! (tambien visite el blog de esta niña).

    Saludos.
    Sept. 6
    Picture of Anonymous
    Capocha_C wrote:
    muy bueno el tema justo estoy en eso ya, que estoy en el curso "Desarrollar aplicaciones Web con .Net Framework". para ver si por fin rindo la 3ra estrella
    Sept. 6
    Picture of Anonymous
    Gustavo_Bonansea wrote:
    Bueno, al menos generan visitas ;-)
    Sept. 6
    Picture of Anonymous
    Capocha_C wrote:
    Gente de mentes complicadas la que postea en tu blog!!!
    Sept. 5
    Picture of Anonymous
    Gustavo_Bonansea wrote:
    La verdad que me sorpredió el comentario de Imperfecta, pero al menos son más tranqui que los posts que le hacen a Ppno. Asimismo logró que visite su blog (maldita curiosidad), todavía no pude compilar bien ninguno de sus entradas en el blog; pero debe ser algún problemita de configuración ;-)
    Sept. 5
    Picture of Anonymous
    __LucasQ__ wrote:
    Interesantísima la opinión de "Imperfecta" sobre cómo extender WebControls... :|
    Sept. 3
    Picture of Anonymous
    IмрєяfэcŦล wrote:
    ¿Cómo? No lo visitaste todavia? Que estas esperando…
    ★۰˚·۰[♀] Bєи∂iтo тυ єяэѕ... вℓα вℓэ вℓi вℓog вℓυ [♂]۰˚·۰﹒★
    Un blog creado para que las mujeres admiren y los hombres aprendan. Eso, sí. Exactamente eso. Porque es tiempo de enseñar a nuestra pareja, novio, acompañante, amigo con privilegios, jefe, marido, peoresnada, polvo, nene o anciano que las niñas sabemos. Y que tenemos con qué motivarnos.
    Quizás esto sea una bendición para ellos. O quizás no. Quizás sea una maldición.
    Te espero por mi space, para que leas mis Post y para que vos tambien compartas tus confesiones.
    Y para que no quede afuera nadie, y no te mate la curiosidad, vos, si vos… hombre, acercate y enterate más de las mujeres.
    Dale apurateee!!! Es un Blog sin desperdicios!!!
    Sept. 3
    Picture of Anonymous
    El_Bruno_ wrote:
    lo bueno de las cosas simples ...
    en 3 lineas se muestra como hacer algo q parece complicado

    felicitaciones :D
    Sept. 3

    Trackbacks

    The trackback URL for this entry is:
    http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!361.trak
    Weblogs that reference this entry
    • None