| Gustavo's profileGustavo BonanseaBlogLists | Help |
|
September 02 Cómo extender webcontrols en ASP.NetEn 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: TagPrefixEl 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, DesignerSerializationVisibilitySon atributos que indican como se va a comportar la propiedad en tiempo de diseño. Me.Attributes.AddDe 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.RegisterClientScriptBlockSe 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();" /> GComments (9)
TrackbacksThe trackback URL for this entry is: http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!361.trak Weblogs that reference this entry
|
|
|