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

Windows Forms Discussion :

Comment annuler le lancement d'une application


Sujet :

Windows Forms

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut Comment annuler le lancement d'une application
    Bonjour,

    j'ai créé une application WinForm
    et je voudrais savoir s'il est possible d'annuler son lancement lorsqu'il est en cours
    et si oui, comment?...

    J'ai essayé un truc mais ça plante...

    Dans le main, j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run(new MonAppli());
    et dans le constructeur de l'appli,
    je teste la config, et si elle n'est pas ok, je voudrais annuler le lancement...
    j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public MonAppli()
    {
        // des trucs...
     
        if (configNOK)
            this.Close();
     
        // des trucs...
    }
    ça plante dans le main au niveau du Application.Run
    avec une erreur 'Impossible d'accéder à un objet supprimé'...

    Quelqu'un aurait-il une solution?...

    Merci

  2. #2
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    a la place de ton this.Close() essaie Application.Exit()

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    Application.Exit() ou simplement :

    Tester ta "configuration" avant de lancer ton run()

    The Monz, Toulouse

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    le Application.Exit() ne marche pas mieux...

    finalement, j'ai laissé le this.Close() dans le constructeur
    et dans le main, j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonAppli appli = new MonAppli();
    if (!appli.IsDisposed)
        Application.Run(appli);
    et là, ça marche...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    Application.Exit n'aura pas marché etant donné que l'application n'a pas encore etait "runné" au moment de l'appel.

    Pour revenir sur le close(), appeler une methode qui va disposer des ressources en plein milieu d'un contructeur, ca sent le paté. Pour faire ca bien, pour ma part, j'exposerai une propriété IsValid sur ma form que j'assignerai dans le constructeur. Si le flag est assigné, tu ne lances pas le Run() et l'application se terminera d'elle meme.

  6. #6
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Tester ta "configuration" avant de lancer ton run()
    est la seule méthode fiable et correct.

    pour rappel, si tu veux faire ça il faut aller dans le fichier program.cs et coder cela dans la méthode Main (enfin quand je dit coder c'est appeler la méthode de vérification et lancer ou non l'affichage de la form )

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    est la seule méthode fiable et correct.
    Merci beaucoup, ca me fait chaud au coeur de lire cela !!!

    Me reste plus qu'a devenir MVP un jour

    The Monz, Toulouse

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Pour revenir sur le close(), appeler une methode qui va disposer des ressources en plein milieu d'un contructeur, ca sent le paté. Pour faire ca bien, pour ma part, j'exposerai une propriété IsValid sur ma form que j'assignerai dans le constructeur. Si le flag est assigné, tu ne lances pas le Run() et l'application se terminera d'elle meme.
    en effet,
    ça revient au même que ce que j'ai fait,
    mais c'est sûrement plus propre

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    C'est surtout que d'une maniere generale, c'est dangeureux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class MaForm : Form
    {
    DummyClass s;
        public MaForm()
        {
            //..
            this.Close();
            //..
            s = new DummyClass();
        }
     
        protected override void Dispose()
        {
            s.DoSomeStuff(); // <= NullRefException !
        }
    }
    L'exemple est trivial, mais c'est pour exposer le probleme. On pourrait faire cela en placant le Close() en fin de contructeur pour eviter des problemes de champs non initialisés, mais au final en terme de design ca revient à tester l'etat post construction. De plus le fait d'appeler un close() dans le constructeur te laissera un fin de construction une form invalide (InvalidOperation) ce qui pourrait etre suprenant si ce n'est pas documenté.

    Bref, pour toutes ces raisons, et pour repeter ce qui a été indiquer au dessus, il vaut mieux tester l'etat, et laisser le constructeur faire son boulot. =)

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

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 1
    Dernier message: 11/10/2006, 09h49
  3. [Event]Annuler la fermeture d'une application
    Par willowII dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 16/11/2004, 09h28
  4. Lancement d'une application en local (!)
    Par Fifoun dans le forum MFC
    Réponses: 5
    Dernier message: 12/06/2004, 17h09
  5. comment securiser l'installation d'une application
    Par silya dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/03/2004, 14h34

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