none
interruption d'application

    Question

  • bonjour,

    voila je suis en développement d'application Windows form, et je voudrais lorsque l'application se ferme mal suite a une coupure de courant ou suite a une fermeture forcé de l'application autre que la voix normale que un message box s'affiche a prochain démarrage de l'application pour afficher un message.

    comment le faire s'il vous plait. merci


    Cardinal dev

    vendredi 1 juillet 2016 10:54

Réponses

  • Bonjour,

    Vous pouvez procéder d'une autre manière.

    Dans mes programmes, je surcharge l’évènement Formclosing par exemple

     private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
       sauverPreferences();
    }

    La fonction sauverPreferences

    Enregistre la position de la fenêtre, la largeur, l'imprimante etc.. dans
    la base de registre. Vous pouvez ajouter d'autres infos
    void sauverPreferences()
     {           
        Assembly l_Ass = Assembly.GetExecutingAssembly();
        AssemblyName l_NomAss = l_Ass.GetName();
        RegistryKey l_DlgKey = Registry.CurrentUser.CreateSubKey("Software\\DEL\\" + l_NomAss.Name);

       if (l_DlgKey != null)
       {
            l_DlgKey.SetValue(RSCE.LANGUE, System.Threading.Thread.CurrentThread.CurrentUICulture.Name);
           l_DlgKey.SetValue(RSCE.DLGX, this.Location.X);
           l_DlgKey.SetValue(RSCE.DLGY, this.Location.Y);
           l_DlgKey.SetValue(RSCE.DLGHAUTEUR, this.Size.Height);
           l_DlgKey.SetValue(RSCE.DLGLARGEUR, this.Size.Width);

           l_DlgKey.SetValue("CODEFERMETURE", "NORMAL");
           if (m_CurrentImprimante.Length > 0)
             l_DlgKey.SetValue(RSCE.IMPRIMANTE, m_CurrentImprimante);
           l_DlgKey.Close();
        }
     }

    et sur l'évènement Load je récupère les préférences

    private void Form1_Load(object sender, EventArgs e)
    {

         recupererPreferences();

    }

    dans la fonction  recupererPreferences testez le code de fermeture

    if (l_DlgKey.GetValue("CODEFERMETURE") == "PROGRAMMEENCOURS")
        MessageBox.Show("Le programme s'est terminé incorrectement.");

    vous récupérez vos infos et positionnez le CODEFERMETURE sur PROGRAMMEENCOURS

     l_DlgKey.SetValue("CODEFERMETURE", "PROGRAMMEENCOURS");

    cordialement
    Gérard



    • Modifié GP79 vendredi 1 juillet 2016 15:34
    • Marqué comme réponse philippe gerard lundi 4 juillet 2016 13:11
    vendredi 1 juillet 2016 15:24
  • Bonjour,

    Il faut ajouter quelques using en tête de fichier

    using System.Reflection;
    using Microsoft.Win32;
    using RSCE = FIJAcommande.Properties.Resources;

    using System.Reflection; pour les assembly

    using Microsoft.Win32; pour les registres

    RSCE est juste un raccourci vers les ressources.

    Il y a une variable string m_CurrentImprimante;

    Vous savez, c'est juste un exemple pour vous montrer comment je fais.
    A vous d'adapter à vos besoin.
    Si vous n'avez pas besoin d'enregistrer la dernière imprimante utilisée, supprimer cette variable.

    Cordialement
    Gérard

    lundi 4 juillet 2016 07:24

Toutes les réponses

  • Bonjour philippe gerard,

    J'espère pouvoir vous aider avec l'information suivante :
    How can I get the Windows last reboot reason

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 1 juillet 2016 14:07
    Modérateur
  • oui de façons manuel mais lorsque tu conçois ton programme comme faire de telle sorte qu'au redémarrage du programme u puisse afficher un message box ( par exemple au toutes autres informations) a l'ouverture.

    Cardinal dev

    vendredi 1 juillet 2016 14:21
  • Bonjour,

    Vous pouvez procéder d'une autre manière.

    Dans mes programmes, je surcharge l’évènement Formclosing par exemple

     private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
       sauverPreferences();
    }

    La fonction sauverPreferences

    Enregistre la position de la fenêtre, la largeur, l'imprimante etc.. dans
    la base de registre. Vous pouvez ajouter d'autres infos
    void sauverPreferences()
     {           
        Assembly l_Ass = Assembly.GetExecutingAssembly();
        AssemblyName l_NomAss = l_Ass.GetName();
        RegistryKey l_DlgKey = Registry.CurrentUser.CreateSubKey("Software\\DEL\\" + l_NomAss.Name);

       if (l_DlgKey != null)
       {
            l_DlgKey.SetValue(RSCE.LANGUE, System.Threading.Thread.CurrentThread.CurrentUICulture.Name);
           l_DlgKey.SetValue(RSCE.DLGX, this.Location.X);
           l_DlgKey.SetValue(RSCE.DLGY, this.Location.Y);
           l_DlgKey.SetValue(RSCE.DLGHAUTEUR, this.Size.Height);
           l_DlgKey.SetValue(RSCE.DLGLARGEUR, this.Size.Width);

           l_DlgKey.SetValue("CODEFERMETURE", "NORMAL");
           if (m_CurrentImprimante.Length > 0)
             l_DlgKey.SetValue(RSCE.IMPRIMANTE, m_CurrentImprimante);
           l_DlgKey.Close();
        }
     }

    et sur l'évènement Load je récupère les préférences

    private void Form1_Load(object sender, EventArgs e)
    {

         recupererPreferences();

    }

    dans la fonction  recupererPreferences testez le code de fermeture

    if (l_DlgKey.GetValue("CODEFERMETURE") == "PROGRAMMEENCOURS")
        MessageBox.Show("Le programme s'est terminé incorrectement.");

    vous récupérez vos infos et positionnez le CODEFERMETURE sur PROGRAMMEENCOURS

     l_DlgKey.SetValue("CODEFERMETURE", "PROGRAMMEENCOURS");

    cordialement
    Gérard



    • Modifié GP79 vendredi 1 juillet 2016 15:34
    • Marqué comme réponse philippe gerard lundi 4 juillet 2016 13:11
    vendredi 1 juillet 2016 15:24
  • merci. Je vais le tester tout a l'heure

    Cardinal dev

    vendredi 1 juillet 2016 15:44
  • j'ai des erreurs je ne comprend pas pourquoi ?


    Cardinal dev

    samedi 2 juillet 2016 23:38
  • Bonjour,

    On dirait que pour pouvoir répondre il manque les premières lignes du module : les clauses "using", pour pouvoir dire si les références mentionnées dans la documentation des classes soulignées sont bien déclarées dans le module, et du reste présentes dans les références de l'application, explorateur de solutions, branche "références".

    Bon mais en y regardant de plus près il doit y avoir autre chose, puisque Registry fait partie de mscorlib, donc il n'y a pas besoin de déclarer de référence supplémentaire.

    Donc, pas le choix : il faut ouvrir la fenêtre des erreurs pour pouvoir en lire les intitulés. Affichage, liste d'erreurs, devrait aider.



    • Modifié Gloops dimanche 3 juillet 2016 10:42
    dimanche 3 juillet 2016 10:24
  • Bonjour,

    Il faut ajouter quelques using en tête de fichier

    using System.Reflection;
    using Microsoft.Win32;
    using RSCE = FIJAcommande.Properties.Resources;

    using System.Reflection; pour les assembly

    using Microsoft.Win32; pour les registres

    RSCE est juste un raccourci vers les ressources.

    Il y a une variable string m_CurrentImprimante;

    Vous savez, c'est juste un exemple pour vous montrer comment je fais.
    A vous d'adapter à vos besoin.
    Si vous n'avez pas besoin d'enregistrer la dernière imprimante utilisée, supprimer cette variable.

    Cordialement
    Gérard

    lundi 4 juillet 2016 07:24