Comment boucler toutes les propriétés d'une classe
J'ai une classe dans mon application Delphi où je voudrais un moyen facile et dynamique de la réinitialisation de toutes les propriétés de la chaîne d' " et toutes les propriétés booléennes à False
Aussi loin que je peux voir sur le web, il devrait être possible de faire une boucle d'une certaine sorte, mais comment faire, il n'est pas clair pour moi.
source d'informationauteur OZ8HP
Vous devez vous connecter pour publier un commentaire.
Veuillez noter que le code suivant ne fonctionne que pour la publication des propriétés d'une classe! Aussi, l'instance d'une classe est passée à la fonction ci-dessous doit au moins avoir publié l'article défini!
Ici est de savoir comment définir la publication de la chaîne de valeurs de propriété à une chaîne vide et la valeur booléenne False en utilisant le style ancien de la RTTI.
Si vous avez Delphi âgés de plus de Delphi 2009, vous pourriez être à côté de la tkUString type. Si oui, il suffit de retirer
à partir du code suivant:
Ici est un simple test de code (notez les propriétés doivent être publiées; si il n'y a pas publié les propriétés de la classe, au moins vide publié l'article doit être là):
si vous êtes un Delphi 2010 (et plus) de l'utilisateur il est une nouvelle RTTI unité (rtti.pas). vous pouvez l'utiliser pour obtenir les informations d'exécution sur votre classe et de ses propriétés (propriétés publiques par défaut, mais vous pouvez utiliser
{$RTTI}
directive du compilateur d'inclure privé et protégé des champs d'information).Par exemple, nous avons à côté de la classe de test avec 3 champs publics (1 booléenne et 2 champs de type chaîne (l'un d'eux est readonly)).
pour énumérer toutes les propriétés de l'objet et de définir les valeurs de par défaut vous pouvez utiliser quelque chose comme le code ci-dessous.
Tout d'abord à tous vous avez à init
TRttiContext
structure (il n'est pas nécessaire, parce que c'est un record). Alors vous devriez obtenir rtti informations sur votre obejct, après que vous pouvez boucler vos propriétés et le filtre (sauter readonly propriétés et d'autres que booléen et stirng). Prendre en compte qu'il y a peu de type de cordes : tkUString, tkString et d'autres (jetez un coup d'oeil àTTypeKind
danstypinfo.pas
)simple code à tester:
et le résultat est
aussi jeter un oeil à Attributsde l'omi, il est bon de marquer les propriétés (dont vous avez besoin pour réinitialiser) avec un certain attribut, et peut-être avec la valeur par défaut comme:
ensuite, vous pourrez filtrer uniquement les propriétés qui sont marqués avec
ResetToAttribute