Ce code montre comment faire un controle effectuant un postback, et ensuite recuperer l'evenement dans une page.
Le code meme du controle est montré ci dessous, il est assez bien commenté, donc je n'en dis pas plus dessus.
Par contre une explication sur comment l'utiliser et peut etre necessaire.
Tout d'abord pour faire un controle de ce genre, il faut créer un nouveau projet : Bibliothèque de controles web, dans visual Studio, une fois la bas, vous mettez le code ci dessous. Ensuite il vous suffit de compiler le projet, et vous avez votre controle sous forme de dll.
Maintenant ouvrez votre projet web dans l'explorateur de solution de Visual Studio, ajouter une reference, recherchez la dll nouvellement créé (dans le dossier bin) puis selectionner et OK.
Ensuite pour ajouter notre controle dans la boite a outil, suffit de cliquer droit dans la boite à outil puis ajouter/supprimer des composants, parcourir, et rechercher la dll, et enfin OK. Vous avez maintenant votre controle dans la boite a outil, vous pourrez le placer sur votre page par simple drag&drop.
Dans le code vous pourrez recuperer l'evenement du mouseover, comme tout les autres evenements, comme ceci :
Private Sub Label1_MouseOver(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.MouseOver
'le label a été survolé
End Sub
Source / Exemple :
Imports System.ComponentModel
Imports System.Web.UI
<Assembly: TagPrefix("Moi.MesControles", "MesControles")>
<ToolboxData("<{0}:Label runat=""server""></{0}:Label>")> Public Class Label
Inherits System.Web.UI.WebControls.Label
'si AutopostBack est à true, il y aura un postback lors du passage de la souris sur le label
Private _AutoPostBack As Boolean
<Bindable(True), Category("Appearance"), DefaultValue("False")> Property [AutoPostBack]() As Boolean
Get
Return _AutoPostBack
End Get
Set(ByVal Value As Boolean)
_AutoPostBack = Value
End Set
End Property
'Evenement qui sera declenché au passage de la souris
Public Event MouseOver As EventHandler
'La méthode render permet d'ecrire le rendu HTML du controle
'Dans notre cas, si _AutoPostBack est à true on rajoute l'attribut onmouseover
'Page.GetPostBackClientEvent est la fonction qui ecrit le code javascript du postback
'c'est à dire, le __DoPostBack('','') dans l'attribut, mais aussi le code javascript du _DoPostBack
'et aussi ecrire les deux champs cachés, il ecrit qu'une seul fois tout ca, s'il est appellé plusieurs fois
'ensuite apres avoir ajouté ou non l'attribut, on ecrit le reste du controle
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
If _AutoPostBack Then
output.AddAttribute("onmouseover", "javascript:" & Page.GetPostBackClientEvent(Me, "onMouseOver"))
End If
MyBase.Render(output)
End Sub
'Quand le label va se charger, on verifie si il vient d'un PostBack, si oui,
'On regarde si c'est notre controle qui a declenché le postback, et on regarde si
'l'argument passé est bien "onmouseover", on pourrait imaginer le meme controle qui posséde l'evenement DoubleClick
'si toutes ces conditions on lance l'evenement via RaiseEvent
Private Sub Label_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
If Not Page.Request.Params("__EVENTTARGET") Is Nothing AndAlso Page.Request.Params("__EVENTTARGET") = Me.UniqueID AndAlso Page.Request.Params("__EVENTARGUMENT") Is Nothing AndAlso Page.Request.Params("__EVENTARGUMENT") = "onMouseOver" Then
RaiseEvent MouseOver(Page.Request.Params("__EVENTTARGET"), (New EventArgs).Empty)
End If
End If
End Sub
End Class
Conclusion :
Ce code fait suite à une question dans le forum :
http://www.aspfr.com/forum.v2.aspx?rm=1&ID=348336
Le but de ce code est surtout de montrer comment generer un postback à partir d'un control, c'est un exemple tres basique pour bien comprendre les choses.
Si vous avez des questions, commentaires etc... ca se passe en dessous.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.