En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType, mais
ce n'est pas possible, je suis donc à la recherche d'une astuce pour faire
qqchose d'approchant.
du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe
container) , je charge dans un PlaceHolder dynamiquement un autre
System.Web.UI.UserControl (control1.ascx: classe control1)
Le problème, c'est que je connais le nom du controle chargé seulement à
l'exécution (ça peut être control1, control2, ...)
et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du
contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx
-------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX
page
Public Event ButtonClicked As CommandEventHandler
End Class
container.ascx
--------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim myControl As System.Web.UI.UserControl =
CType(Me.LoadControl(Me.TemplateSourceDirectory & "/Folder1/control1.ascx"),
System.Web.UI.UserControl)
...
'-- ajout dans le placeHolder
plhContent.Controls.Add(myControl)
'-- ajout du gestionnaire d'évènement
AddHandler CType(plhContent.Controls(0), control1).ButtonClicked, AddressOf
Header11_ButtonClicked
End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e As
CommandEventArgs)
// TODO
End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Daniel TIZON
Bonjour Damien, Si tu charges dynamiquement tes usercontrols c'est qu'ils partagent une interface connue et commune à priori, sous peine d'être obligé de modifier le code de ta classe container pour la prise en charge d'un nouveau type. Pour réaliser çà le plus simple est de déclarer une interface qui sera implémentée par tous les UserControls chargés dynamiquements
Public Interface IButtonClicked Event ButtonClicked As CommandEventHandler End Interface
Puis d'implémenter cette interface
Class control1 Inherits System.Web.UI.UserControl Implements IButtonClicked
Public Event ButtonClicked As CommandEventHandler Implements IButtonClicked.ButtonClicked .... End Class
et dans le code de container.ascx,
Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(TypeControle + ".ascx"), System.Web.UI.UserControl) '-- ajout du gestionnaire d'évènement AddHandler CType(myControl, IButtonClicked).ButtonClicked, AddressOf myControl_Clicked ....
Protected Sub myControl_Clicked(ByVal sender As Object, ByVal e As CommandEventArgs) Label1.Text = "commande :" + e.CommandName End Sub
En espérant que çà t'aideras, Cordialement,
-- Daniel TIZON MCP - MCSD.NET - MCT
"news.microsoft.com" a écrit dans le message de news:
Bonjour,
En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType, mais ce n'est pas possible, je suis donc à la recherche d'une astuce pour faire qqchose d'approchant. du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe container) , je charge dans un PlaceHolder dynamiquement un autre System.Web.UI.UserControl (control1.ascx: classe control1) Le problème, c'est que je connais le nom du controle chargé seulement à l'exécution (ça peut être control1, control2, ...) et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx -------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX page Public Event ButtonClicked As CommandEventHandler End Class
container.ascx --------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(Me.TemplateSourceDirectory & "/Folder1/control1.ascx"), System.Web.UI.UserControl) ... '-- ajout dans le placeHolder plhContent.Controls.Add(myControl) '-- ajout du gestionnaire d'évènement AddHandler CType(plhContent.Controls(0), control1).ButtonClicked, AddressOf Header11_ButtonClicked End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e As CommandEventArgs) // TODO End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?
D'avance merci de votre aide
Damien
Bonjour Damien,
Si tu charges dynamiquement tes usercontrols c'est qu'ils partagent une
interface connue et commune à priori, sous peine d'être obligé de modifier
le code de ta classe container pour la prise en charge d'un nouveau type.
Pour réaliser çà le plus simple est de déclarer une interface qui sera
implémentée par tous les UserControls chargés dynamiquements
Public Interface IButtonClicked
Event ButtonClicked As CommandEventHandler
End Interface
Puis d'implémenter cette interface
Class control1
Inherits System.Web.UI.UserControl
Implements IButtonClicked
Public Event ButtonClicked As CommandEventHandler Implements
IButtonClicked.ButtonClicked
....
End Class
et dans le code de container.ascx,
Dim myControl As System.Web.UI.UserControl =
CType(Me.LoadControl(TypeControle + ".ascx"), System.Web.UI.UserControl)
'-- ajout du gestionnaire d'évènement
AddHandler CType(myControl, IButtonClicked).ButtonClicked, AddressOf
myControl_Clicked
....
Protected Sub myControl_Clicked(ByVal sender As Object, ByVal e As
CommandEventArgs)
Label1.Text = "commande :" + e.CommandName
End Sub
En espérant que çà t'aideras,
Cordialement,
--
Daniel TIZON
MCP - MCSD.NET - MCT
"news.microsoft.com" <nn@nn.nn> a écrit dans le message de news:
ey4cRjUFGHA.2696@TK2MSFTNGP14.phx.gbl...
Bonjour,
En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType,
mais ce n'est pas possible, je suis donc à la recherche d'une astuce pour
faire qqchose d'approchant.
du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe
container) , je charge dans un PlaceHolder dynamiquement un autre
System.Web.UI.UserControl (control1.ascx: classe control1)
Le problème, c'est que je connais le nom du controle chargé seulement à
l'exécution (ça peut être control1, control2, ...)
et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du
contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx
-------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX
page
Public Event ButtonClicked As CommandEventHandler
End Class
container.ascx
--------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim myControl As System.Web.UI.UserControl =
CType(Me.LoadControl(Me.TemplateSourceDirectory &
"/Folder1/control1.ascx"), System.Web.UI.UserControl)
...
'-- ajout dans le placeHolder
plhContent.Controls.Add(myControl)
'-- ajout du gestionnaire d'évènement
AddHandler CType(plhContent.Controls(0), control1).ButtonClicked,
AddressOf Header11_ButtonClicked
End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e
As CommandEventArgs)
// TODO
End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?
Bonjour Damien, Si tu charges dynamiquement tes usercontrols c'est qu'ils partagent une interface connue et commune à priori, sous peine d'être obligé de modifier le code de ta classe container pour la prise en charge d'un nouveau type. Pour réaliser çà le plus simple est de déclarer une interface qui sera implémentée par tous les UserControls chargés dynamiquements
Public Interface IButtonClicked Event ButtonClicked As CommandEventHandler End Interface
Puis d'implémenter cette interface
Class control1 Inherits System.Web.UI.UserControl Implements IButtonClicked
Public Event ButtonClicked As CommandEventHandler Implements IButtonClicked.ButtonClicked .... End Class
et dans le code de container.ascx,
Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(TypeControle + ".ascx"), System.Web.UI.UserControl) '-- ajout du gestionnaire d'évènement AddHandler CType(myControl, IButtonClicked).ButtonClicked, AddressOf myControl_Clicked ....
Protected Sub myControl_Clicked(ByVal sender As Object, ByVal e As CommandEventArgs) Label1.Text = "commande :" + e.CommandName End Sub
En espérant que çà t'aideras, Cordialement,
-- Daniel TIZON MCP - MCSD.NET - MCT
"news.microsoft.com" a écrit dans le message de news:
Bonjour,
En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType, mais ce n'est pas possible, je suis donc à la recherche d'une astuce pour faire qqchose d'approchant. du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe container) , je charge dans un PlaceHolder dynamiquement un autre System.Web.UI.UserControl (control1.ascx: classe control1) Le problème, c'est que je connais le nom du controle chargé seulement à l'exécution (ça peut être control1, control2, ...) et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx -------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX page Public Event ButtonClicked As CommandEventHandler End Class
container.ascx --------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(Me.TemplateSourceDirectory & "/Folder1/control1.ascx"), System.Web.UI.UserControl) ... '-- ajout dans le placeHolder plhContent.Controls.Add(myControl) '-- ajout du gestionnaire d'évènement AddHandler CType(plhContent.Controls(0), control1).ButtonClicked, AddressOf Header11_ButtonClicked End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e As CommandEventArgs) // TODO End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?
D'avance merci de votre aide
Damien
news.microsoft.com
C'est exactement ça.
Merci beaucoup
Damien
"Daniel TIZON" a écrit dans le message de news: %
Bonjour Damien, Si tu charges dynamiquement tes usercontrols c'est qu'ils partagent une interface connue et commune à priori, sous peine d'être obligé de modifier le code de ta classe container pour la prise en charge d'un nouveau type. Pour réaliser çà le plus simple est de déclarer une interface qui sera implémentée par tous les UserControls chargés dynamiquements
Public Interface IButtonClicked Event ButtonClicked As CommandEventHandler End Interface
Puis d'implémenter cette interface
Class control1 Inherits System.Web.UI.UserControl Implements IButtonClicked
Public Event ButtonClicked As CommandEventHandler Implements IButtonClicked.ButtonClicked .... End Class
et dans le code de container.ascx,
Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(TypeControle + ".ascx"), System.Web.UI.UserControl) '-- ajout du gestionnaire d'évènement AddHandler CType(myControl, IButtonClicked).ButtonClicked, AddressOf myControl_Clicked ....
Protected Sub myControl_Clicked(ByVal sender As Object, ByVal e As CommandEventArgs) Label1.Text = "commande :" + e.CommandName End Sub
En espérant que çà t'aideras, Cordialement,
-- Daniel TIZON MCP - MCSD.NET - MCT
"news.microsoft.com" a écrit dans le message de news:
Bonjour,
En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType, mais ce n'est pas possible, je suis donc à la recherche d'une astuce pour faire qqchose d'approchant. du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe container) , je charge dans un PlaceHolder dynamiquement un autre System.Web.UI.UserControl (control1.ascx: classe control1) Le problème, c'est que je connais le nom du controle chargé seulement à l'exécution (ça peut être control1, control2, ...) et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx -------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX page Public Event ButtonClicked As CommandEventHandler End Class
container.ascx --------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(Me.TemplateSourceDirectory & "/Folder1/control1.ascx"), System.Web.UI.UserControl) ... '-- ajout dans le placeHolder plhContent.Controls.Add(myControl) '-- ajout du gestionnaire d'évènement AddHandler CType(plhContent.Controls(0), control1).ButtonClicked, AddressOf Header11_ButtonClicked End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e As CommandEventArgs) // TODO End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?
D'avance merci de votre aide
Damien
C'est exactement ça.
Merci beaucoup
Damien
"Daniel TIZON" <daniel_tizon_pasdespan@hotmail.com> a écrit dans le message
de news: %23L83zUXFGHA.1180@TK2MSFTNGP09.phx.gbl...
Bonjour Damien,
Si tu charges dynamiquement tes usercontrols c'est qu'ils partagent une
interface connue et commune à priori, sous peine d'être obligé de modifier
le code de ta classe container pour la prise en charge d'un nouveau type.
Pour réaliser çà le plus simple est de déclarer une interface qui sera
implémentée par tous les UserControls chargés dynamiquements
Public Interface IButtonClicked
Event ButtonClicked As CommandEventHandler
End Interface
Puis d'implémenter cette interface
Class control1
Inherits System.Web.UI.UserControl
Implements IButtonClicked
Public Event ButtonClicked As CommandEventHandler Implements
IButtonClicked.ButtonClicked
....
End Class
et dans le code de container.ascx,
Dim myControl As System.Web.UI.UserControl =
CType(Me.LoadControl(TypeControle + ".ascx"), System.Web.UI.UserControl)
'-- ajout du gestionnaire d'évènement
AddHandler CType(myControl, IButtonClicked).ButtonClicked,
AddressOf myControl_Clicked
....
Protected Sub myControl_Clicked(ByVal sender As Object, ByVal e As
CommandEventArgs)
Label1.Text = "commande :" + e.CommandName
End Sub
En espérant que çà t'aideras,
Cordialement,
--
Daniel TIZON
MCP - MCSD.NET - MCT
"news.microsoft.com" <nn@nn.nn> a écrit dans le message de news:
ey4cRjUFGHA.2696@TK2MSFTNGP14.phx.gbl...
Bonjour,
En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType,
mais ce n'est pas possible, je suis donc à la recherche d'une astuce pour
faire qqchose d'approchant.
du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe
container) , je charge dans un PlaceHolder dynamiquement un autre
System.Web.UI.UserControl (control1.ascx: classe control1)
Le problème, c'est que je connais le nom du controle chargé seulement à
l'exécution (ça peut être control1, control2, ...)
et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du
contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx
-------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX
page
Public Event ButtonClicked As CommandEventHandler
End Class
container.ascx
--------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim myControl As System.Web.UI.UserControl =
CType(Me.LoadControl(Me.TemplateSourceDirectory &
"/Folder1/control1.ascx"), System.Web.UI.UserControl)
...
'-- ajout dans le placeHolder
plhContent.Controls.Add(myControl)
'-- ajout du gestionnaire d'évènement
AddHandler CType(plhContent.Controls(0), control1).ButtonClicked,
AddressOf Header11_ButtonClicked
End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e
As CommandEventArgs)
// TODO
End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?
Bonjour Damien, Si tu charges dynamiquement tes usercontrols c'est qu'ils partagent une interface connue et commune à priori, sous peine d'être obligé de modifier le code de ta classe container pour la prise en charge d'un nouveau type. Pour réaliser çà le plus simple est de déclarer une interface qui sera implémentée par tous les UserControls chargés dynamiquements
Public Interface IButtonClicked Event ButtonClicked As CommandEventHandler End Interface
Puis d'implémenter cette interface
Class control1 Inherits System.Web.UI.UserControl Implements IButtonClicked
Public Event ButtonClicked As CommandEventHandler Implements IButtonClicked.ButtonClicked .... End Class
et dans le code de container.ascx,
Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(TypeControle + ".ascx"), System.Web.UI.UserControl) '-- ajout du gestionnaire d'évènement AddHandler CType(myControl, IButtonClicked).ButtonClicked, AddressOf myControl_Clicked ....
Protected Sub myControl_Clicked(ByVal sender As Object, ByVal e As CommandEventArgs) Label1.Text = "commande :" + e.CommandName End Sub
En espérant que çà t'aideras, Cordialement,
-- Daniel TIZON MCP - MCSD.NET - MCT
"news.microsoft.com" a écrit dans le message de news:
Bonjour,
En gros, je souhaiterais pouvoir passer une chaîne à la fonction CType, mais ce n'est pas possible, je suis donc à la recherche d'une astuce pour faire qqchose d'approchant. du genre de CType(plhContent.Controls(0), "NomDeMaClasse")
Sur le page_load d'un System.Web.UI.UserControl (container.ascx: classe container) , je charge dans un PlaceHolder dynamiquement un autre System.Web.UI.UserControl (control1.ascx: classe control1) Le problème, c'est que je connais le nom du controle chargé seulement à l'exécution (ça peut être control1, control2, ...) et que je veux ajouter dans contrainer un gestionnaire d'un évenemment du contrôle chargé
Un peu de code sera plus efficace qu'un long discours :
control1.ascx -------------
Public Class control1
'-- Define the event that we will bubble up to the containing ASPX page Public Event ButtonClicked As CommandEventHandler End Class
container.ascx --------------
Public Class container
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myControl As System.Web.UI.UserControl = CType(Me.LoadControl(Me.TemplateSourceDirectory & "/Folder1/control1.ascx"), System.Web.UI.UserControl) ... '-- ajout dans le placeHolder plhContent.Controls.Add(myControl) '-- ajout du gestionnaire d'évènement AddHandler CType(plhContent.Controls(0), control1).ButtonClicked, AddressOf Header11_ButtonClicked End Sub
Private Sub Header11_ButtonClicked(ByVal sender As System.Object, ByVal e As CommandEventArgs) // TODO End Sub
End Class
Comment faire ça sans connaitre le type avant l'éxecution ?