Supprimer un compsant lors d'un evenement [delphi] - Delphi/Pascal - Programmation
Marsh Posté le 11-11-2006 à 14:33:00
Si tu veux détruire ce composant je ne crois pas que tu puisses le faire dans un de ses évènements ou alors tu devras prendre en compte le code avant et aprés le doSelect.
Je m'explique : la méthode que tu affectes au OnSelect de ton composant est déclenchée par le doSelect de son parent en terme d'héritage.
En fait il regarde si tu as rattaché le doSelect à un OnSelect que tu aurais codé. (inspecteur d'objet)
Pour savoir si ce parent fais qqch aprés le OnSelect tu dois regarder dans son code, mais si tu détruis le composant il y aura certainement des erreurs du genres "erreur à l'adresse toto...." car il ne se trouvera plus lui même.
J'espère que je ne suis pas trop flou.
Tu devrais plutot nous dire pourquoi tu as à détruire ce composant...
Marsh Posté le 12-11-2006 à 21:49:34
-- Veuillez escuser les aproximation syntaxique, je n'ai pas de compileur sous la main. --
C'est ça. Il fait le "erreur à l'adresse toto" à la sortie de la procedure OnSelect (il arrive à finir l'execution de la procedure. Solide ces bestioles!).
Pour resumer, je suis en train de construire un composant(dérivant de TPanel) contenant une liste de combo.
Chaque combo est affiché sous le precedant.
Le dernier combo de la liste est toujours vide (liste de choix renseignée, mais ItemIndex = -1)
Lorsqu'on selectionne une valeur dans le dernier combo, un nouveau combo apparait en bas de la liste.
Ca donne grosso modo le code ci-dessous (avec un Tform "normal comme support):
Code :
|
Pour l'instant, on a donc une liste de choix qu'on peut etende à l'infini, mais on ne peut pas suprimer un élément.
Tu aura remarqué que dans la liste des choix, j'ai ajouté une valeur "--supprimer--". L'idée est que si l'utilisateur selectionnne cette valeur, le combo est supprimé et ceux en bas se décalent vers le haut.
Le code de la suppression est simple:
Code :
|
Mais où le caser .
Pour l'instant, il est dans le TForm1.Canvas.OnRefresh(je teste chaque combo pour vois si il est sur "suprimer" ). Plutot crade et surtout, c'est galère pour une exécution pas à pas. .
Marsh Posté le 13-11-2006 à 11:30:50
Si ça peut vous aider à vous faire une idée, voila un exemple simple d'utilisation
http://mapage.noos.fr/zozol/bin/listecombo.zip
Marsh Posté le 13-11-2006 à 21:25:44
Je ne vois pas trop de solution, en fait ta solution me semble pas mal mais je l'aurai dédiée à un objet tierce dont l'exécution aurait été déclenchée hors de la Combo. (le OnActivate du panel qui rend la main à la Combo précédente dans la liste ??)
C'est pas top mais c'est plus facile à débuguer je crois ?
Marsh Posté le 06-11-2006 à 14:28:00
Comme le dit très bien l'aide de la methode "free" :
Ne libérez jamais explicitement un composant dans un de ses propres gestionnaires d'événement ou dans un gestionnaire d'événement d'un composant qu'il possède ou contient.Par exemple,ne libérez pas un bouton,ou la fiche qui le possède,dans son gestionnaire d'événement OnClick.
Oui, mais manque de bol, c'est exactement ce que je souhaite faire (en fait, détruire un combobox après le "OnSelect" )
Quelqu'un a une solution élégante à me sugerer?