,(sender as Tbutton) en c++ ?? - C++ - Programmation
Marsh Posté le 17-06-2002 à 10:07:35
Marsh Posté le 17-06-2002 à 10:14:45
Tu voulais donc nous parler de C++ et de TButton ?
Marsh Posté le 17-06-2002 à 10:33:58
Toutes mes excuses...
un petit dérapage et voilà que mon message inachevé se retrouve posté..!
En fait j'aimerais savoir comment on fait pour transtyper en c++
(exemple (sender as TButton) en delphi)
Imaginons que je veuille créer un évement sur le click d'un bouton qui changerait son caption qui serait commun à plusieurs boutons donc généraliser en me servant du Sender.
Merci d'avance,
Marsh Posté le 17-06-2002 à 10:38:04
Je pense que tu bosse avec C++builder, t'aurais donc un TObject *Sender en entrée:
Code :
|
Marsh Posté le 17-06-2002 à 10:42:29
Essaie avec la macro "dynamic_cast"
Marsh Posté le 17-06-2002 à 10:42:52
grilled
Marsh Posté le 17-06-2002 à 11:03:08
Harkonnen a écrit a écrit : grilled ![]() |
HeHe
Marsh Posté le 17-06-2002 à 11:11:04
meu non ! c'est les premiers instants qui font le plus mal
Marsh Posté le 17-06-2002 à 11:23:54
sinon plus facile :
((TButton *)Sender)->.....
mais bon c'est peut-être moins propre
Marsh Posté le 17-06-2002 à 11:26:07
antp a écrit a écrit : sinon plus facile : ((TButton *)Sender)->..... mais bon c'est peut-être moins propre ![]() |
effectivement c pas propre du tout
Marsh Posté le 17-06-2002 à 11:27:35
bah c'est comme ça que Borland le fait dans ses exemples
Marsh Posté le 17-06-2002 à 11:28:42
surprenant de leur part... Microsoft utilise dynamic_cast dans le MSDN
Marsh Posté le 17-06-2002 à 11:34:44
je retrouve justement pas d'exemples... j'ai peut-être rêvé
enfin sinon en general je fais un truc du genre
if Sender is TButton then
(Sender as TButton).machin
ou
if Sender is TButton then
TButton(Sender).machin
en Pascal (les deux sont équivalents il me semble), où y a pas d'autres moyen de faire un cast, il lance d'office une exception comme le dynamic cast ; donc c'est vrai qu'en C++ c'est mieux d'utiliser dynamic cast...
j'imagine que le cast bourrin ((TButton *)Sender) ça crashe si c'est pas un TButton ?
Marsh Posté le 17-06-2002 à 11:36:09
Harkonnen a écrit a écrit : surprenant de leur part... Microsoft utilise dynamic_cast dans le MSDN |
Le pb c que le dynamic_cast est bugué dans le VC++ 6 vaut mieux faire un static_cast.
Marsh Posté le 17-06-2002 à 11:36:52
comment ça buggé ?
Marsh Posté le 17-06-2002 à 11:38:18
antp a écrit a écrit :![]() |
Bun il marche pas comme il faut. Je connais pas les détails de la chose mais je sais qu'il y a un problème avec.
Marsh Posté le 17-06-2002 à 11:39:52
letoII a écrit a écrit : Le pb c que le dynamic_cast est bugué dans le VC++ 6 ![]() |
j'ai jamais testé avec VC++ 6, mais dans le 7 il ne semble pas y avoir de souci...
Marsh Posté le 17-06-2002 à 11:40:28
antp a écrit a écrit : j'imagine que le cast bourrin ((TButton *)Sender) ça crashe si c'est pas un TButton ? |
sans aucun doute !
Marsh Posté le 17-06-2002 à 11:47:07
Harkonnen a écrit a écrit : sans aucun doute ! |
Non si tu fais pas un appel de méthode et que tu reste dans la mémoire associée à l'objet ça peut passer, mais bon faut avoir vraiment de la chance et de toute menière ça fait n'importe quoi
Marsh Posté le 17-06-2002 à 12:01:44
clair... faut avoir vraiment un coup de bol monstre pour que ça fonctionne sans pb...
Marsh Posté le 17-06-2002 à 19:25:39
En quoi ((TButton *)Sender) c'est moins propre et plus bourrin que le dynamic_cast??
Histoire que j'approfondisse le sujet, même si à mon niveau les 2 font l'affaire et que donc vous avez déjà résolu mon pb, en vous remerciant..
Marsh Posté le 17-06-2002 à 19:29:50
Tout simplement dans la norme c++ dynamic_cast est l'oppérateur à utiliser lorsque l'ont cast un pointeur d'une classe mère vers un pointeur d'une classe fille. C'est fait pour.
Marsh Posté le 17-06-2002 à 19:45:00
mik38 a écrit a écrit : En quoi ((TButton *)Sender) c'est moins propre et plus bourrin que le dynamic_cast?? ![]() |
bhen dynamic cast lance une exception si jamais tu ne pouvais pas faire le cast (genre tu caste un TButton en une classe que tu as créée toi-même et qui n'a aucun lien de parenté), alors que le ((TButton *)Sender) bhen ça risque de planter si tu pouvais pas le faire, mais ça plantera pas à tous les coups, donc bug difficile à déceler.
Marsh Posté le 17-06-2002 à 10:00:26
Bonjour