IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

FormClosed ok et le Form s'affiche quand-même [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut FormClosed ok et le Form s'affiche quand-même
    Salut,

    Si j'ai bien compris, form.close() ne détruit pas le form mais le met simplement hide.
    Dans l'évènement FormCloded du form j'ai donc mis this.dispose().

    Pour charger le form à partir du form parent, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parcelleDetails = new ParcelleDetails(this, NumForme);
    parcelleDetails.show();
    Cela fonctionne très bien (j'ai mis la fenêtre parent et une variable NumForme dans le constructeur).

    Comme au chargement j'ai de longues méthodes, dans le load j'ouvre un showDialog signalant l'avancement d'un backgroundworker, avec un bouton cancel.
    Si l'utilisateur appuie sur le bouton cancel, le backgroundworker est arrêté et le showDialog est fermé en retournant un DialogResult.Cancel.
    Cela fonctionne aussi.

    Toutefois, si l'utilisateur a interrompu le chargement, je veux que la fenêtre se ferme.
    J'ai donc écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (dlgProgressResult == DialogResult.Cancel)
        this.Close();
    Cela fonctionne et l'application passe bien sur this.Close(); puis sur this.Dispose(); dans le FormClosed. L'application étant passée dans le FormClosed, il me semble que le form devrait être fermé.

    Par contre la fenêtre reste toujours ouverte.
    Je ne comprend pas.
    Il me semble pourtant que le Form_Load se produit après le show(). Dans ce cas, pourquoi le le form ne se ferme-t-il pas et n'est-il pas détruit alors qu'il est bien passé dans le FormClosed ?

    Merci de vos z'avis z'avisés.
    Il n'y a pas de problèmes. Il n'y a que des solutions.
    Malheureusement, elles sont parfois un peu dur à trouver ...


    Aucune touche n'a été maltraitée pour réaliser ce texte.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    Bonjour,

    J'ai lu en diagonal mais :

    Il me semble pourtant que le Form_Load se produit après le show().
    Au contraire, l'évènement load d'un formulaire se produit avant le premier affichage de la form.

    Par ailleurs concernant :

    Si j'ai bien compris, form.close() ne détruit pas le form mais le met simplement hide.
    C'est uniquement vrai si le formulaire a été appelé avec un .ShowDialog.
    Si un formulaire est appelé avec un .Show, le dispose sera fait avec le .Close().

    MvK
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut
    Merci,

    Mais dans ce cas :
    Je crée le Form par parcelleDetails = new ParcelleDetails(this, NumForme);.
    Si l'utilisateur cancel la procédure, je close() le Form (et je le Dispose() en plus dans le FormClosed)

    Il me semble donc que le Form ne devrait plus exister et je devrais avoir une erreur au moment du parcelleDetails.show(); puisque le Form a été Dispose();

    Or il montre bien le Form.

    Je ne comprend pas comment cela se produit.
    Il n'y a pas de problèmes. Il n'y a que des solutions.
    Malheureusement, elles sont parfois un peu dur à trouver ...


    Aucune touche n'a été maltraitée pour réaliser ce texte.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    Si j'ai bien suivi, c'est ton form ParcelleDetails, affiché avec un .show que tu veut .Close avant son affichage (donc pendant le .Load).

    Si je ne m'abuses faire un .close pendant un load d'un form non-modal, devrais te lever une exception, ce pourquoi la form n'est pas fermé, ni dispose et qu'elle est affiché, pour peu que tu gères l'exception.

    Pour moi la seule manière de faire ce que tu veux c'est de passer le close dans un invoke :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.BeginInvoke(new MethodInvoker(this.Close));
    Autre solution, si tu affiche le form ParcelleDetails en modal avec un ShowDialog this.DialogResult = DialogResult.Cancel; pendant le load devrait quant à lui fonctionner correctement.

    MvK
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  5. #5
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Points : 110
    Points
    110
    Par défaut
    Salut
    Passe ton code du Load dans show

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut
    J'ai retravaillé mon code pour pouvoir tout mettre dans mon constructeur, après le InitializeComponent();.
    De la sorte je sais si je dois Show() la Form ou pas.

    Merci de vos conseils.

    PS Pour brnf1 : Comment fais-tu pour le mettre dans le show au lieu du Load ? Ça pourrait être intéressant pour d'autres appli.
    Il n'y a pas de problèmes. Il n'y a que des solutions.
    Malheureusement, elles sont parfois un peu dur à trouver ...


    Aucune touche n'a été maltraitée pour réaliser ce texte.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. try except qui affiche quand même l'erreur
    Par Basile le disciple dans le forum Débuter
    Réponses: 13
    Dernier message: 21/06/2015, 19h44
  2. Réponses: 8
    Dernier message: 31/01/2013, 18h51
  3. Une cellule sans contenu mais affichée quand même?
    Par petozak dans le forum Balisage (X)HTML et validation W3C
    Réponses: 30
    Dernier message: 30/08/2006, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo