2 votes

empêche la fermeture du formulaire puis stackoverflow

J'ai essayé d'empêcher la fermeture d'un formulaire en traitant l'appel FormClosing.

if(e.CloseReason == CloseReason.UserClosing)
{
    e.Cancel = true;
    SomeFunction();
}

Cependant, lorsqu'il entre dans la fonction SomeFunction(), une exception de débordement de pile est levée. Quelle pourrait être la raison de ce phénomène ? Merci.


EDITAR:

Oups, je suis désolé de ne pas avoir débogué. La SomeFunction() contient quelques validations de champs et quand les champs sont valides, j'appelle la fonction Close() du formulaire. Et puisque j'ai la gestion sur le FormClosing(), il va passer à nouveau dans le SomeFunction(). Je ne savais pas que l'appel de la fonction Close() était aussi sous CloseReason.UserClosing. Merci pour vos réponses.

1voto

Ergwun Points 5293

Une cause fréquente de débordement de pile est une récursion infinie.

Vous devez vérifier que SomeFunction() ne provoque pas SomeFunction() pour être appelé à nouveau (possible en déclenchant l'événement que vous traitez.

Vous pouvez vérifier la pile d'appels dans le débogueur pour voir si c'est le cas (comme dans les commentaires ci-dessus).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X