Les types [Résolu]

Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Bonjour à tous,

J'ai un objet TextBox par exemple et je voudrais savoir si il hérite de la classe Object ? (c'est un cas d'école), comment faire cela ? Ce qu'il faudrait c'est qq chose du genre :

if (monobjet->get_Type()->CompareTo("Object") == 0)
// alors mon objet derive bien de la classe Object

Par avance, merci.

8 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
C'est bien ce que je pensais, tu fais un dynamic_cast
C'est pas très joli tu sais :)

Voila comment tu peux faire:

TextBox* textBox = 0;
if(textBox = dynamic_cast<TextBox*>(c))
{
textBox->Cut();
}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
C'est une affectation, pas une comparaison. C'est vrai que c'est uns syntaxe assez particulière, j'imagine que si le dynamic_cast échoue il retourne NULL
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
C'est le genre de choses que tu sais à la compilation en général, donc je vois pas trop a quoi ca pourrait servir.
Tu peux quand même regarder du coté de la RTTI
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
Ben en faite c'est parceque je veux faire un menu "copier, couper,coller" et que j'ai besoin de savoir si le control actif à été hérité de "TextBox" pour pouvoir utiliser sa propriété "cut" ou "past" par exemple, c'est quoi le RTTI ? mon code est en c++ managé
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Le RTTY c'est pour avoir des informations sur les types à l'exécution, je sais pas comment ca se passe en managé.
Je comprend pas ce que tu veux faire de toutes facons
if (monobjet->get_Type()->CompareTo("Object") == 0)
// Tu mets quoi ici?
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
Ben dans mon application j'ai un menu avec "couper, copier, coller", quand il clique sur "couper" faut que je fasse un couper sur le composant qui est activé sur ma form. Il faudrait donc que je sache si ce composant est de type "TextBox", afin de caster mon composant, exemple ( quand l'utilisateur clique sur couper)

Control * c = this->ActiveControl ;

if(c->GetType()->ToString()->CompareTo("Derive_Textbox_Virgule.Derive_Textbox_VirguleControl") == 0)
dynamic_cast<TextBox*>(c)->Cut() ;
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
Merci bcp, ca marche mais par contre j'ai pas vraiment compris pourquoi, pourquoi utilises tu "=" plutot que "==" ? et comment ca se fait que ca marche ?
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok, merci c'est très ingenieux en tout cas