2010-08-16 4 views
3

Je développe un cadre Delphi et devez charger une liste d'objets métier dans un contrôle de grille au début. Les cadres Delphi n'ont pas d'événement OnCreate, alors quelle est la meilleure façon de répliquer cela? Dois-je redéfinir le constructeur comme est suggéré sur About? Devrais-je simplement faire une procédure publique loadData() et que le conteneur parent l'appelle quand il est prêt à créer? Je veux m'assurer que tous les contrôles enfants sont chargés et prêts à partir avant de les remplir avec des données et je ne suis pas familier avec la hiérarchie de création de composants Delphi.Modèle OnCreate événement pour Delphi Frame

+1

Oui, le constructeur hérité prioritaire fera l'affaire – zz1433

Répondre

2

Je ne lierais pas le remplissage des données à la création. Vous pouvez raisonnablement créer un cadre et le conserver, mais changer le contenu qu'il affichera plus tard. Si vous peuplez onCreate alors vous devez libérer et recréer afin d'obtenir de nouvelles données. Donc, avoir une LoadData() est une meilleure approche. En fonction de la complexité de l'application et du nombre de formulaires et d'images que vous avez, il peut s'avérer utile d'avoir toutes vos images héritées d'un cadre de base commun. Vous pouvez ensuite introduire une méthode virtuelle LoadData dans la base et remplacer dans les sous-classes d'image.

Alternativement, vous pouvez également concevoir une interface et avoir des cadres l'implémenter. Si cela est fait correctement, cela pourrait vous permettre de traiter uniformément des formulaires, des cadres ou même des panneaux, etc.

Il est difficile de vous donner un conseil plus spécifique, car cela dépend de la complexité de l'interface graphique et de l'application. En général, il est toujours bon d'avoir aussi peu de logique/code dans les formes/cadres que possible. L'introduction d'un type de classe FormManager gérant l'enregistrement et l'affichage des formulaires/cadres peut aider à isoler ce comportement dans un seul emplacement. Mais si c'est une petite application simple, vous pouvez vous en sortir simplement en utilisant des formulaires.

0

Je généralement choisir l'une des deux approches différentes:

  1. Un constructeur surchargée prenant une sorte d'objet qui contient soit tous les éléments ou savoir comment les obtenir (par exemple un recenseur)
  2. Une propriété avec un setter pour le même type d'objet

De cette façon, la logique d'obtention des objets peut être cachée ailleurs. (Maintenant, il se peut que ce soit ce que vous faites déjà, mais le nom 'LoadData' me fait croire que votre renommée va réellement charger des données à partir d'un référentiel de stockage au lieu de simplement afficher les données. else a déjà été récupéré ...)