Bonjour,
j'aurai une petite question. Si je capture une exception dans le constructeur d'une form, comment détruire cette form qui était en train d'être créée ?
Je bute là dessus depuis un moment
Merci
Bonjour,
j'aurai une petite question. Si je capture une exception dans le constructeur d'une form, comment détruire cette form qui était en train d'être créée ?
Je bute là dessus depuis un moment
Merci
C'est clair 8)
Positionne une variable private de type boolean à True (False par défaut).
Dans FormShow si elle vaut True tu appeles Self.Close.
J'ai déjà fait un truc similaire en mettant le caption de la fenêtre à '' et ensuite si ma fenêtre à ce caption je la détruit, le problème c'est qu'elle apparait durant quelques millisecondes puis se ferme.
Ce que je voudrai c'est éviter ce clignotement, une gestion transparente de l'erreur. J'affiche déjà un message d'erreur et je ne voudrai voir que lui.
pour qu'elle n'apparaisse pas : visible à false, et application.showMainForm de même (si c'est la fenetre principale).
et pour la fermer (tu n'auras plus le onShow) poste lui un WM_CLOSE dans le créateur. Ou si c'est approprié, application.terminate.
La prochaine révolution informatique : les machines qui font ce qu'on veut, au lieu de faire ce qu'on leur demande...
Grand Vizir du Grand Gourou - Trois-quart aile gauche du TRFC et intendant de 3ème mi-temps - Papy fait de la résistance
Pour n'importe quelle classe, si une exception est levée dans le constructeur alors Delphi prend en charge la destruction de l'objet.
Donc il me semble que tu as 2 solutions :
1) soit l'affichage du message de l'exception qui est levée dans ton constructeur ne te gene pas et tu ne fais rien (tu auras un message mais ta Form sera bien detruite).
2) soit tu écris qqch comme:
Voilà, ça peut paraitre sale, mais je pense qu'au contraire c'est assez propre (mais vous avez le droit de me contredire ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 constructor TForm1.create(AOwner: TComponent); begin inherited create(AOwner); try // mon code qui peut lever une exception except // mon code pour la gestion de l'exception abort; //on lève une exception silencieuse : cela va appeler le destructeur end; end;
Phil
Effectivement je n'avais pas pensé à passez la propriété visible à false.
Par contre dans mon cas j'ai une esception lancée dans une méthode qu'appelle le constructeur. J'ai fait un try et j'ai affiché un message. Par contre la fenêtre apparait toujours.
Je vais tester tout ça.
merci.
Normal car ton exception ne se propage pas. Il faut faire un abort à la fin de ton bloc try..except (cf. post precedent).Par contre dans mon cas j'ai une esception lancée dans une méthode qu'appelle le constructeur. J'ai fait un try et j'ai affiché un message. Par contre la fenêtre apparait toujours.
Phil
Le abort est une solution efficace, je ne sais pas si c'est le plus propre mais c'est simple et efficace
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager