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 :

Ouverture avortée du formulaire


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut Ouverture avortée du formulaire
    Bonjour,

    J'ai une question un peu bête mais je suis un peu gêné par ce sujet.

    Comment, sous certain condition est-il possible de fermer une Form en cours d'initialisation sans risquer l'erreur "System.ObjectDisposedException" de façon aléatoire.
    Mon cas actuel, est que je passe en paramètre des informations, selon ces paramètres, l'application peut passer en terme d'utilité à un outil de traitement de données ou à une interface à afficher.

    Je n'ai clairement pas la bonne méthode en utilisant avant le terme de l'initialisation de la Form le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyBase.Dispose()
    MyBase.BeginInvoke(New MethodInvoker(AddressOf Me.Close))
    Mais pour le coup je vois pas comment faire.
    Les paramètres étant reçus à l'appel de l'application je ne voit pas d’évent à utiliser, et le but ici est justement d'éviter à avoir à exécuter une action (Clique sur bouton ou autre) pour lancer le traitement que je souhaiterais automatique.

    en vous remerciant de cette aide.

  2. #2
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Je recherche en parallèle des solutions.

    Pour le moment, ce que je trouve de plus logique serait de réécrire mon appli dans une base "Module" plutôt que windows form.
    Sachant que de toute façon, toute mon interface est réalisé par ligne de programmation, est-ce pour vous la meilleurs solution ?

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    La solution est très simple : n'appelle pas toi-même la méthode Dispose. Elle sera automatiquement appelée lors de l'exécution de la méthode Close. (cf. https://msdn.microsoft.com/en-us/lib...=vs.110).aspx)
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    En fait, cette méthode dispose je l'ai ajouté dans l'espoir de réglé ce problème déjà présent auparavant .

    Ceci dit, j'ai l'impression que la méthode de fermeture (me/Mybase.close sur la fenêtre principale) que je connaissait depuis longtemps mais que je n'utilisait pas jusqu'au présent est peut être totalement erroné.

    Je viens de trouver qu'il serait plus judicieux d'utiliser "Application.Exit()" (Ce qui parait plus logique en faite...), n'ayant pas le concepteur sous les yeux pour le moment je ne peux pas tester, mais qu'en pensez-vous ?

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Le plus simple serait sans doute de nous donner plus d'info. D'une part, le code complet appelant la méthode close (et surtout le où), ainsi que le code utilisé pour la création de la form, car j'ai l'impression que le problème se situe plus au niveau de l'ouverture que de la fermeture. Comment passes-tu les paramètres permettant de décider la méthode à utiliser ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  6. #6
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Le code actuel est :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Params = My.Application.CommandLineArgs(0).ToString
     
            If Params  = "/enregistrement" Then
                    enrRegistreProgramme()
     
                    MyBase.Dispose()
                    MyBase.BeginInvoke(New MethodInvoker(AddressOf Me.Close))
            End If
     
    '...... plusieurs dizaines de ligne d'initialisation de contrôls. Notament la Form :
     
            Form1.Location = New Point((Screen.PrimaryScreen.Bounds.Width / 2) - (350 / 2), (Screen.PrimaryScreen.Bounds.Height / 2) - (240 / 2))
            Form1.FormBorderStyle = Windows.Forms.FormBorderStyle.None
            Form1.BackColor = ColorTranslator.FromHtml(OBJ_Ini.LoadString("CONFIGURATION", "Couleur1", "#780D0D"))
            Form1.StartPosition = FormStartPosition.Manual
            Form1.Size = New Size(350, 240)
            Form1.ShowInTaskbar = False
            Form1.AutoScroll = True
            Form1.TopMost = True
     
    '.... les contrôls sont initialisé et ajouté bêtement (NS_Length = Longueur variable de ma Form, les "Dock" ne m'était d'aucune aide) :
            Panel1.Size = New Size(NS_Length, 79)
            Panel1.Dock = DockStyle.Top
            MyBase.Controls.Add(Panel1)
     
    ' encore des lignes du même type...
    End Sub

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Où est instancié le formulaire ?

    Sinon, je commencerai déjà par mettre toutes les lignes d'initialisation dans la clause Else de ta conditionnel. Inutile d'initialiser tout cela si tu fermes le formulaire !
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  8. #8
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    C'est un projet Application Form, je ne gère donc pas l'instanciation de la Form.

    Pour le code sous "Else", ce n'est pas faux, bien que j'ai toujours pris l'habitude (pour des fonctions normales) de définir dans un premier lieu, les actions qui peuvent mener à l'arrêt de la fonction elle même afin d'éviter justement le traitement inutile.

    Concernant le constructeur sous VB.net, le fait de mettre un terme à celui-ci avant sa fin normale n’empêche pas la suite du code à s’exécuter ?

  9. #9
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    C'est tout à fait possible de le faire.

    Il suffit de faire un clic droit sur le projet, et dans les propriétés, de décocher la case "Activer l'infrastructure de l'application". En objet de démarrage, tu choisis "Sub Main". Ensuite, il ne te reste qu'à écrire cette procédure. Et là, tu peux faire tous les tests nécessaires avant de lancer ton formulaire
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  10. #10
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Effectivement... le sub main(), je l'ai deja vu mais je n'ai pas associé cette possibilité à mon problème dans ma petite tête ^^".

    Je regarde cela ce soir, je verrais bien si ça règle mon problème (Ça serait bien, pas envie de tout mettre dans un module ).

  11. #11
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    L'avantage, c'est que tu pourras vérifier les paramètres passé à ton programme et ensuite seulement décider si oui ou non il faut instancier et afficher ton formulaire. Cela sera beaucoup plus propre (et moins problématique !) que de tenter de fermer un formulaire pendant son chargement.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  12. #12
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Nettoyage fait dans le code et surtout dans sub main().

    J'ai plus l'impression d'avoir le problème, mais c'est clair que car reste logique en fait de passer par le sub main() plutôt que le load de la form pour ce genre de cas ^^.

    Merci.

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

Discussions similaires

  1. Ouverture d'un formulaire a partir ...
    Par nache dans le forum IHM
    Réponses: 3
    Dernier message: 21/06/2005, 11h30
  2. Réponses: 9
    Dernier message: 27/10/2004, 17h00
  3. Réponses: 6
    Dernier message: 11/10/2004, 14h58
  4. Réponses: 9
    Dernier message: 07/10/2004, 19h41
  5. lecture de son à l'ouverture d'un formulaire
    Par cynferdd dans le forum IHM
    Réponses: 4
    Dernier message: 16/06/2003, 15h31

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