Probléme de classes

Résolu
Vianneyp Messages postés 82 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2010 - 24 nov. 2008 à 12:13
Vianneyp Messages postés 82 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2010 - 24 nov. 2008 à 19:42
(Re)Bonjour,
J'ai un peu (beaucoup ?) de mal avec les classes et je souhaiterai vous poser quelques questions.
J'ai créer une classe dérivée de TabPage,que j'ai appelé ClsTab et ce dans le but de pouvoir charger un "modèle d'onglet" dans un TabControl.
Je procède de la maniéré suivante :
        Dim NewTab As New ClsTab
        TabControl1.TabPages.Add(NewTab )
L'onglet est ajouté sans aucun probléme.
Voici donc me première question : par quel miracle est-ce que j'arrive a ajouter ma classe ClsTab au TabControl en utilisant sa méthode add alors qu'aucune surcharge n'est prévue pour gérer le type ClsTab ? Est-ce qu'il y a "conversion" ?
C'est la même chose dans l'autre sens :
TabControl.TabPages(index As Integer) As System.Windows.Forms.TabControl
L'instruction : MsgBox TabControl1.TabPages(0).name affiche le nom du 1er onglet du TabControl,qui est aussi le nom donnée a chaque instance de ma classe ClsTab.Mon onglet est donc bien du type ClsTab et non du type TabPage.Le encore je ne comprend pas comment on passe de ClsTab a System.Windows.Forms.TabControl.D'ailleurs,en utilisant cette méthode,je n'ai accès qu'aux propriétés/méthodes communes a ClsTab et TabControl.
Merci d'avance pour ces quelques éclaircissements.

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
24 nov. 2008 à 14:17
Salut,

C'est le principe de l'héritage en programmation objet.
Tu as un objet dont tu peux dériver pour ajouter des proprietes evenemet, ...
et il herite des proprietes de son parent

TabControl1.TabPages(0).name --> le name de tabpages stocke dans le parent

directcast(TabControl1.TabPages(0),gettype(ClsTab )).manouvelleprop --> la valeur de manouvelleprop
Il faut utiliser un cast pour aller sur l'enfant dans ce cas.

Il est conseillé de verifier si tu es bien dans le type ClsTab

Car rien empeche de faire
ClsTab
ClsTab1
ClsTab2

Dim NewTab1 As New ClsTab1
TabControl1.TabPages.Add(NewTab1 )
Dim NewTab2 As New ClsTab2
TabControl1.TabPages.Add(NewTab2 )

Et dans cas tu as trois type d'objet
donc TabControl1.TabPages(0).name --> fonctionnera toujours

fonctionnera que pour ClsTab
directcast(TabControl1.TabPages(0),gettype(ClsTab )).manouvelleprop

Esperant avoir ete clair
3
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
24 nov. 2008 à 17:00
Salut,
Même si tu ajoute un ClsTab au TabControl, celui-ci "voit" une TabPage, mais une TabPage qui contient des contrôles (que tu as ajouté sur ClsTab). Comme déjà dit, ceci est possible car ClsTab dérive de TabPage. Il n'y a pas de conversion, ton ClsTab est géré comme tout autre TabPage par le TabControl.
3
Vianneyp Messages postés 82 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2010
24 nov. 2008 à 19:42
Merci a vous deux .
Je n'avais jamais entendue parlé de directcast() mais c'est exactement ce que je cherchais.
0
Rejoignez-nous