J'ai un controle utilisateur web qui contient un bouton
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
Public Class ObjectSelect
Inherits System.Web.UI.UserControl
Public Overridable Sub LoadValues(ByVal ID As String)
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'Placez ici le code utilisateur pour initialiser la page
End Sub
End Class
End Namespace
J'ai un autre controle utilisateur web qui contient un label et qui
herite du premier :
<asp:Label id="lblTeamName" EnableViewState="False" runat="server"
Font-Bold="True">Label</asp:Label>
Public Class SelectItem
Inherits ObjectSelect
Public Overrides Sub LoadValues(ByVal ID As String)
Dim t As New BusinessClass.Team(ID)
lblTeamName.Text = t.Nom
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'Placez ici le code utilisateur pour initialiser la page
End Sub
End Class
Je ne sais pas comment faire pour que quand j'utilise mon controle
SelectItem dans une page, il affiche le bouton (du controle de base)
et le label (du controle derive). Je n'arrive jamais a afficher le
bouton du controle de base.
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
Zazar
St?phane Dubois wrote:
J'ai un controle utilisateur web qui contient un bouton
<snip code>
J'ai un autre controle utilisateur web qui contient un label et qui herite du premier :
<snip code>
Je ne sais pas comment faire pour que quand j'utilise mon controle SelectItem dans une page, il affiche le bouton (du controle de base) et le label (du controle derive). Je n'arrive jamais a afficher le bouton du controle de base.
Quelqu'un aurait-il une idee ?
Quand vous écrivez le code-behind d'une page web, ou d'un contrôle utilisateur web, vous écrivez une classe que je vais appeler Cbehind. Quand vous écrivez le code html/aspx/ascx associé, vous écrivez le code d'une classe Caspx héritant de Cbehind. Vous ne l'écrivez pas en C# ou en VB.NET, mais c'est pareil. Dans Cbehind, vous ne créez aucun objet, vous ne faîtes qu'en déclarer (avec le modificateur protected comme l'aurez remarqué et non private), c'est Caspx qui va se charger de créer les objets (tous les objets avec runatserver = true sont créés, et si une propriété existe avec comme nom, l'id de l'objet, alors l'objet est affecté à la propriété).
Dans votre situation, vous avez : CBedind1 qui déclare un bouton, Caspx1 qui crée un label bouton et qui hérite de Cbehind1 CBehind2 qui déclare un label et qui hérite de CBehind1, Caspx2 qui crée un label et hérite de CBehind2.
Quand vous utilisez votre contrôle utilisateur sur une page, vous utilisez en fait, Caspx2 (qui hérite de CBehind2 qui hérite de Cebhind1). Vous utilisez donc un contrôle qui déclare un bouton, un label et qui crée un label (mais pas de bouton puisque Caspx1 n'intervient nulle part). Voilà pourquoi vous n'avez pas de bouton.Pour pallier à ce problème, il faut que CBehind2 encapsule votre premier contrôle, pas qu'il en hérite. De plus sans savoir ce que font vos contrôles, je parie que l'héritage est illogique dans votre situation. Savez-vous quand une classe doit hériter d'une autre ou l'encapsuler ? Si non, je vous conseillerais de jeter un oeil sur un cours de POO.
-- Zazar
St?phane Dubois wrote:
J'ai un controle utilisateur web qui contient un bouton
<snip code>
J'ai un autre controle utilisateur web qui contient un label et qui
herite du premier :
<snip code>
Je ne sais pas comment faire pour que quand j'utilise mon controle
SelectItem dans une page, il affiche le bouton (du controle de base)
et le label (du controle derive). Je n'arrive jamais a afficher le
bouton du controle de base.
Quelqu'un aurait-il une idee ?
Quand vous écrivez le code-behind d'une page web, ou d'un contrôle
utilisateur web, vous écrivez une classe que je vais appeler Cbehind. Quand
vous écrivez le code html/aspx/ascx associé, vous écrivez le code d'une
classe Caspx héritant de Cbehind. Vous ne l'écrivez pas en C# ou en VB.NET,
mais c'est pareil.
Dans Cbehind, vous ne créez aucun objet, vous ne faîtes qu'en déclarer (avec
le modificateur protected comme l'aurez remarqué et non private), c'est
Caspx qui va se charger de créer les objets (tous les objets avec
runatserver = true sont créés, et si une propriété existe avec comme nom,
l'id de l'objet, alors l'objet est affecté à la propriété).
Dans votre situation, vous avez :
CBedind1 qui déclare un bouton, Caspx1 qui crée un label bouton et qui
hérite de Cbehind1
CBehind2 qui déclare un label et qui hérite de CBehind1, Caspx2 qui crée un
label et hérite de CBehind2.
Quand vous utilisez votre contrôle utilisateur sur une page, vous utilisez
en fait, Caspx2 (qui hérite de CBehind2 qui hérite de Cebhind1). Vous
utilisez donc un contrôle qui déclare un bouton, un label et qui crée un
label (mais pas de bouton puisque Caspx1 n'intervient nulle part). Voilà
pourquoi vous n'avez pas de bouton.Pour pallier à ce problème, il faut que
CBehind2 encapsule votre premier contrôle, pas qu'il en hérite.
De plus sans savoir ce que font vos contrôles, je parie que l'héritage est
illogique dans votre situation. Savez-vous quand une classe doit hériter
d'une autre ou l'encapsuler ?
Si non, je vous conseillerais de jeter un oeil sur un cours de POO.
J'ai un controle utilisateur web qui contient un bouton
<snip code>
J'ai un autre controle utilisateur web qui contient un label et qui herite du premier :
<snip code>
Je ne sais pas comment faire pour que quand j'utilise mon controle SelectItem dans une page, il affiche le bouton (du controle de base) et le label (du controle derive). Je n'arrive jamais a afficher le bouton du controle de base.
Quelqu'un aurait-il une idee ?
Quand vous écrivez le code-behind d'une page web, ou d'un contrôle utilisateur web, vous écrivez une classe que je vais appeler Cbehind. Quand vous écrivez le code html/aspx/ascx associé, vous écrivez le code d'une classe Caspx héritant de Cbehind. Vous ne l'écrivez pas en C# ou en VB.NET, mais c'est pareil. Dans Cbehind, vous ne créez aucun objet, vous ne faîtes qu'en déclarer (avec le modificateur protected comme l'aurez remarqué et non private), c'est Caspx qui va se charger de créer les objets (tous les objets avec runatserver = true sont créés, et si une propriété existe avec comme nom, l'id de l'objet, alors l'objet est affecté à la propriété).
Dans votre situation, vous avez : CBedind1 qui déclare un bouton, Caspx1 qui crée un label bouton et qui hérite de Cbehind1 CBehind2 qui déclare un label et qui hérite de CBehind1, Caspx2 qui crée un label et hérite de CBehind2.
Quand vous utilisez votre contrôle utilisateur sur une page, vous utilisez en fait, Caspx2 (qui hérite de CBehind2 qui hérite de Cebhind1). Vous utilisez donc un contrôle qui déclare un bouton, un label et qui crée un label (mais pas de bouton puisque Caspx1 n'intervient nulle part). Voilà pourquoi vous n'avez pas de bouton.Pour pallier à ce problème, il faut que CBehind2 encapsule votre premier contrôle, pas qu'il en hérite. De plus sans savoir ce que font vos contrôles, je parie que l'héritage est illogique dans votre situation. Savez-vous quand une classe doit hériter d'une autre ou l'encapsuler ? Si non, je vous conseillerais de jeter un oeil sur un cours de POO.